一、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;
}