从一个微型例子看C/C++的内存分配机制
时间:2011-01-05 来源:welkinwalker
- 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
- 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
- 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

using namespace std;
char * GetMemory(void)
{
char p_arr[] = "p_arr : hello world";
char *ptr = "ptr : hello world";
printf("%08X\n",p_arr);
printf("%08X\n",&p_arr);
printf("%08X\n",ptr);
printf("%08X\n",&ptr);
puts(p_arr);
puts(ptr);
// return p_arr;
return ptr;
}
int main()
{
char * str=NULL;
str = GetMemory();
printf("%08X\n",str);
printf("%08X\n",&str);
puts(str);
return 0;
}
BFFFF6F0
BFFFF6F0
hello world
BFFFF6F0
BFFFF718
00400AAC
BFFFF6F8
hello world
00400AAC
BFFFF718
hello world
相关阅读 更多 +
排行榜 更多 +