#include <stdio.h>
#include <stdlib.h>
int main(void){
int MB = 0;
while(malloc(1 << 20))
++MB;
printf("Allocated %d MB total\n", MB);
return EXIT_SUCCESS;
}
原理,因为2的20次方就是1MB(2的10次方为1KB,2的30次方为1GB,以此类推)。
如果你请求分配的内存块小于1MB,你得到的内存是否比这要多一些呢?为什么?
答:
这不是绝对的!
在本例中使用
1<<22(4MB)得到的结果乘4是2000MB
1<<21(2MB)得到的结果乘2是1972MB
1<<20(1MB)得到的结果是1918MB
1<<19(0.5MB)得到的结果除2是1812MB
1<<18(0.25MB)得到的结果除4是2003MB
1<<17(0.125MB)得到的结果除8是2034MB
显然出现了一个意外的结果。