全部博文(346)
分类: C/C++
2008-08-28 09:19:21
#include <stdio.h>
#include <stdlib.h>
int nGlobal = 100;
int main(void )
{
char *pLocalString1 = "LocalString1";
const char *pLocalString2 = "LocalString2";
static int nLocalStatic = 100;
int nLocal = 1;
const int nLocalConst = 20;
int *pNew = new int[5];
char *pMalloc = (char *)malloc(1);
//全局变量(nGlobal)、静态变量和局部的静态变量(nLocalStatic)
printf("global variable: 0x%x ", &nGlobal);
printf("static variable: 0x%x ", &nLocalStatic);
printf("local expression 1: 0x%x ", pLocalString1);
printf("local expression (const) : 0x%x ", pLocalString2);
//堆内存
printf(" ");
printf("new: 0x%x ", pNew);
printf("malloc: 0x%x ", pMalloc);
printf(" ");
printf("local pointer(pNew): 0x%x ", &pNew);
printf("local pointer(pLocalString2): 0x%x ", &pLocalString2);
printf("local pointer(pLocalString1): 0x%x ", &pLocalString1);
printf("local variable(nLocal): 0x%x ", &nLocal);
printf("local pointer(pMalloc): 0x%x ", &pMalloc);
printf("local const variable: 0x%x ", &nLocalConst);
return 0;
}输出为:
global variable: 0x417000
static variable: 0x417004
local expression 1: 0x4158d4
local expression (const) : 0x4158c4
new: 0x32a10
malloc: 0x32a50
//边界对齐通过New申请了5个整数需要的内存,通过
malloc申请了1个字节。这里的地址相差32个字节,如果按正常算应该是20个字节为0x14,malloc申请地址应该从new后的20个字节
32a24开始,但占据32个字节的内存(0x32a10~0x32a50),即在内存分配时按16个字节对齐。
local pointer(pNew): 0x13ff30
local pointer(pLocalString2): 0x13ff54
local pointer(pLocalString1): 0x13ff60
local variable(nLocal): 0x13ff48
local pointer(pMalloc): 0x13ff24
local const variable: 0x13ff3c