#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
顯然出現了一個意外的結果。