我对C程序的程序执行布局图中的堆有疑问.
我知道所有动态分配的内存都分配在动态增长的堆中.但我想知道C程序的最大堆大小是多少?
我只是附加一个示例C程序…在这里我试图分配1GB内存到字符串,甚至做memset …
#include
#include
#include
int main(int argc, char *argv[])
{
char *temp;
mybuffer=malloc(1024*1024*1024*1);
temp = memset(mybuffer,0,(1024*1024*1024*1));
if( (mybuffer == temp) && (mybuffer != NULL))
printf("%x - %x\n", mybuffer, &mybuffer[((1024*1024*1024*1)-1)]]);
else
printf("Wrong\n");
sleep(20);
free(mybuffer);
return 0;
}
如果我一次在3个实例中运行上面的程序,那么malloc应该至少在一个实例中失败[我感觉如此] ……但是malloc仍然是成功的.
如果成功,我可以知道操作系统如何处理3GB的动态分配内存.