程序内存区域划分
- 内核空间
- 栈
- 内存映射段
- 堆
- 数据段
- 代码段
内核空间
用户编写的代码无法读取到的内存区域
栈(地址顺序向下增长)
栈里存放局部变量
内存映射段
(文件映射,动态库,匿名映射)
堆
堆里存放New malloc申请到的内存
数据段
全局数据、静态数据
代码段
可执行代码 、 只读常量
例1
#include <iostream>
using namespace std;
int a = 10;
int b; //也可不初始化,但最好初始化
int main()
{
int* Array = (int*)malloc(sizeof(int) * 10);
if(Array) //申请到空间一定判空指针
{
//To Do
}
free(Array);Array = NULL; //防止野指针
return 0;
}
上述代码中的整形a和b存在数据段(全局变量);Array存在栈里;但是Array变量存的是一个地址,这个地址指向堆地址。可用取地址符 ‘&’ 进行测试。
另外如果在Debug环境下去求变量a和b之间的字节长度,会发现间隔了12个字节。这是编译器在变量前后都留了4字节去方便调试;在Release模式下求得变量a和b之间的字节间隔为4。另测试程序的运行效率也必须在Release模式下。(某些情况下测试环境和发行版环境程序的运行效率相差巨大)