《C专家编程》中的一个程序,觉得挺有意思,记录一下。
运行下列程序,看看在你的进程中可以分配多大的内存。
#include <stdio.h> #include <stdlib.h> main() { int Mb = 0; while ( malloc(1<<20)) ++Mb; printf("Allocated %d Mb total\n", Mb); }
总共分配的内存量取决于交换区和你的系统配置中的进程限制。如果实际分配的内存块小于1M字节,你实际得到的内存是否比这要多一些?为什么?
为了让这个程序能够在有内存限制的MS-DOS上运行,把每次分配的单元从1MB改为1KB(就是把1<<20改为1<<10,并用KB代替MB)。
在我的系统物理内存为2GB,可以分配的内存大概是1880MB,你的系统呢?
另,在Windows系统中把1<<20改为1<<10会有很神奇的事情发生哦~