一、内存分区模型
代码区:存放代码,编译后的二进制文件也存放在这里。不允许修改,可以执行。
常量存储区:存放常量,也不允许修改,程序运行结束后会自动释放。
全局区:又叫静态存储区。存放全局变量、静态变量。
堆区:动态申请的内存空间。由程序员分配和释放,若程序员没有释放,程序结束后由操作系统回收。
栈区 :栈由编译器自动分配和释放,存放函数的参数值、局部变量等。
内存分区的意义:不同区域存放不同数据,赋予不同的生命周期。
二、代码实例
请结合代码注释理解
int main(int argc, char *argv[])
{
static int stVar = 3; //静态变量,在全局区
string sVar = "hello C++"; //sVar:局部变量,在栈区; "hello C++":字符串常量,在常量存储区
//pVar为指针变量,在栈区
//pVar指向一个字符数组的首地址,这个字符数组是使用malloc(new也可以)在堆区开辟的连续的内存空间
char *pVar = (char*)malloc(10);
//我们可以使用把它们打印出来理解
cout << "指针变量所在内存地址:" << (void*)&pVar << endl; //打印指针变量所在内存地址
//打印pVar指向的字符数组各个元素的地址
cout << "字符数组各元素所在内存地址:" << endl;
for (int i=0; i < 10; ++i)
{
cout << (void*)&pVar[i] << " ";
}
free(pVar);
system("pause");
return 0;
}
输出: