程序中的不同类型的变量在内存中的存储方式不同的,以前写程序时对这方面不是很了解,当了解了操作系统后总算是对这方面有点认识了,在这里总结一下。
首先,来看一下进程中的内存分布图。
可以看到内存被分成了几个部分,下面分别对这几个部分加以说明。
文本(代码区):程序编译后生成的二进制代码就被存放在这里,这一部分是只读的。
数据区:存放程序中的静态变量(全局变量)
堆:自由分配区,C++中的new运算符和C语言中的malloc函数分配内存时都是在这一区域中。
栈:存储程序中的局部变量。
栈从高位地址向下分配,堆从低位地址向上分配。
下面结合一个具体的C语言实例来说明一下。
#include <stdio.h>
#include <stdlib.h>
int i1 = 10; //全局变量(数据区)
int i2; //全局变量(数据区)