开点程序员面试必考题--在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
关注 开点工作室
微信扫一扫关注公众号