MyMSDN

MyMSDN记录开发新知道

如何查看你可以分配多大内存

#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

显然出现了一个意外的结果。

posted on 2009-05-25 01:37 volnet 阅读(475) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


特殊功能