一、C/C++程序的内存分配
一个C/C++程序占用的内存区一般可以分为如下五种:
①全局/静态数据区
②常量数据区
③代码区
④堆
⑤栈
显然代码存放在代码区,而程序的数据则根据数据种类的不同放在不同的存储区中,在C/C++中,数据主要有几种不同的分类:常量和变量、全局数据和局部数据,静态数据与非静态数据,以及程序运行中产生和释放的动态数据。
其中
①全局/静态数据区中存储全局变量及静态变量(包括全局静态变量和局部静态变量);
②常量数据区中存储程序中的各种常量;
③栈中存储自动变量后者局部变量,以及传递的函数参数等
④堆是用户控制的存储区,存储动态产生的数据(new或者malloc)。
下面通过一个简单的实例来具体看看:
#include #include int g_nGlobal = 100; int main() { char *pLocalString1 = "LocalString1"; const char *pLocalString2 = "LocalString2"; static int nLocalStatic = 0; int nLocal = 0; const int nLocalConst = 100; int *pIntNew = new int[5]; char *pMalloc = (char *)malloc(1); printf("global variable: 0x%x/n", &g_nGlobal); printf("static variable: 0x%x/n", &nLocalStatic); printf("local printer1: 0x%x/n", pLocalString1); printf("local const printer: 0x%x/n/n", pLocalString2); printf("new: 0x%x/n", pIntNew); printf("malloc: 0x%x/n/n", pMalloc); printf("local printer(pIntNew): 0x%x/n", &pIntNew); printf("local printer(pLocalString1): 0x%x/n", &pLocalString1); printf("local printer(pLocalString2): 0x%x/n", &pLocalString2); printf("local variable(nLocal): 0x%x/n", &nLocal); printf("local printer(pMalloc): 0x%x/n", &pMalloc); printf("local const(nLocalConst): 0x%x/n", &nLocalConst); delete []pIntNew; free(pMalloc); return 0; } |