#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;
}
原理,因?yàn)?的20次方就是1MB(2的10次方為1KB,2的30次方為1GB,以此類推)。
如果你請(qǐng)求分配的內(nèi)存塊小于1MB,你得到的內(nèi)存是否比這要多一些呢?為什么?
答:
這不是絕對(duì)的!
在本例中使用
1<<22(4MB)得到的結(jié)果乘4是2000MB
1<<21(2MB)得到的結(jié)果乘2是1972MB
1<<20(1MB)得到的結(jié)果是1918MB
1<<19(0.5MB)得到的結(jié)果除2是1812MB
1<<18(0.25MB)得到的結(jié)果除4是2003MB
1<<17(0.125MB)得到的結(jié)果除8是2034MB
顯然出現(xiàn)了一個(gè)意外的結(jié)果。