开点程序员面试必考题--在1G内存的计算机中能否malloc(1.2G)?

 

面试 必考题 malloc...




戳上面的蓝字“开点工作室”关注我们哦 


问题:在1G内存的计算机中能否malloc(1.2G)?为什么?



【解答要点】:malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。

本题要申请空间的大小为1.2G=230×1.2 Byte,转换为十六进制约为4CCC CCCC,这个数值已经超过了int类型的表示范围,但还在unsigned的表示范围。幸运的是malloc函数要求的参数为unsigned。见下面的示例代码。

#include

#include

int main()

{

char*p;

constunsigned k= 1024*1024*1024*1.2;

printf("%x
",k);

p= (char *)malloc( k );

if( p!=NULL )

printf("OK");

else

printf("error");

return0;

}

【知识拓展】malloc能够申请的空间到底能达到多大,还真是一个比较复杂的问题。想知道在一台机器上malloc能够申请的最大空间到底是多少,可以使用下面的程序进行测试。

#include

#include

unsigned maximum = 1024*1024*1024;

int main(int argc, char *argv[])

{

unsignedblocksize[] = {1024*1024, 1024, 1};

inti, count;

void* block;

for(i=0; i


    关注 开点工作室


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册