内存四区

简介: 内存四区

1.内存分区模型



2.程序运行前:


//放在主函数外面就是全局变量
//全局变量
int g_a = 10;
int g_b = 10;
//全局常量
//const表示常量
const int c_g_a = 10;
const int c_g_b = 10;
int main() {
//局部变量
int a = 10;
int b = 10;
//打印地址
cout << "局部变量a地址为: " << (int)&a << endl;
cout << "局部变量b地址为: " << (int)&b << endl;
cout << "全局变量g_a地址为: " << (int)&g_a << endl;
cout << "全局变量g_b地址为: " << (int)&g_b << endl;
//静态变量
    //在数据前面加上static就转化为了静态变量
static int s_a = 10;
static int s_b = 10;
cout << "静态变量s_a地址为: " << (int)&s_a << endl;
cout << "静态变量s_b地址为: " << (int)&s_b << endl;
cout << "字符串常量地址为: " << (int)&"hello world" << endl;
cout << "字符串常量地址为: " << (int)&"hello world1" << endl;
cout << "全局常量c_g_a地址为: " << (int)&c_g_a << endl;
cout << "全局常量c_g_b地址为: " << (int)&c_g_b << endl;
const int c_l_a = 10;
const int c_l_b = 10;
cout << "局部常量c_l_a地址为: " << (int)&c_l_a << endl;
cout << "局部常量c_l_b地址为: " << (int)&c_l_b << endl;
system("pause");
return 0;
}



3.程序运行后

#include<iostream>
using namespace std;
int* func() {
 int a = 10;
 return &a;
}
int main() {
 int* p = func();
 cout << *p << endl;
 return 0;
}



4.new操作符




#include<iostream>
using namespace std;
int* func() {
  int* a = new int(10);
  return a;
}
int main() {
  int* p = func();
  cout << *p << endl;
  cout << *p << endl;
  delete  p;
  system("pause");
  return 0;



相关文章
|
27天前
|
存储 C语言 C++
C++栈区、堆区、全局静态区、代码区的介绍
C++栈区、堆区、全局静态区、代码区的介绍
|
1月前
|
存储 程序员 编译器
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
31 0
|
4月前
|
存储 程序员 编译器
C++内存分布
C++内存分布
21 0
|
7月前
|
存储 程序员 编译器
静态内存与动态内存 & malloc函数动态分配内存
静态内存与动态内存 & malloc函数动态分配内存
99 0
|
8月前
|
存储 Linux C语言
【C/C++内存分布】
【C/C++内存分布】
49 0
栈区,堆区,动态内存开辟,错误及原因
栈区,堆区,动态内存开辟,错误及原因
65 0
|
安全 C++
C++指针的内存分配与内存安全
C++指针的内存分配与内存安全
107 0
|
存储 Linux C++
linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】
转自:http://blog.csdn.net/gongweijiao/article/details/8207333 原文参见:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201215115845553/    一)概述   .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储。
1063 0
|
存储 编译器 C语言
已释放的栈内存详解
  (被调)函数内的局部变量在函数返回时被释放,不应被外部引用。虽然并非真正的释放,通过内存地址仍可能访问该栈区变量,但其安全性不被保证。后续若还有其他函数调用,则其局部变量可能覆盖该栈区内容。常见情况有两种:前次调用影响当前调用的局部变量取值(函数的"遗产");被调函数返回指向栈内存的指针,主调函数通过该指针访问被调函数已释放的栈区内容(召唤亡灵)。   【示例1】先后连续调用Ancestor和Sibling函数,注意函数内的dwLegacy整型变量。
213 0
|
Java
DirectByteBuffer内存释放
DirectByteBuffer内存释放
267 0
DirectByteBuffer内存释放