标签:for 十六 count col main erro lang sizeof style
malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。
本题要申请空间的大小为 1.2G=2 30 × 1.2 Byte ,转换为十六进制约为 4CCC CCCC ,这个数值已经超过了 int 类型的表示范围,但还在 unsigned 的表示范围。幸运的是 malloc 函数要求的参数为 unsigned 。见下面的示例代码。
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 char*p; 6 const unsigned k= 1024*1024*1024*1.2; 7 printf("%x\n",k); 8 p= (char *)malloc( k ); 9 if( p!=NULL ) 10 printf("OK"); 11 else 12 printf("error"); 13 return 0; 14 }
【知识拓展】malloc能够申请的空间到底能达到多大,还真是一个比较复杂的问题。想知道在一台机器上malloc能够申请的最大空间到底是多少,可以使用下面的程序进行测试。
1 #include <stdio.h> 2 3 #include <stdlib.h> 4 5 unsigned maximum = 1024*1024*1024; 6 7 int main(int argc, char *argv[]) 8 9 { 10 11 unsignedblocksize[] = {1024*1024, 1024, 1}; 12 13 inti, count; 14 15 void* block; 16 17 for(i=0; i<sizeof(blocksize)/sizeof(unsigned); i++ ) 18 19 { for( count = 1; ;count++ ) 20 21 { block = malloc( maximum +blocksize[i]*count ); 22 23 if( block!=NULL ) { 24 25 maximum= maximum + blocksize[i]*count; 26 27 free(block ); 28 29 }else { 30 31 break; 32 33 } 34 } 35 } 36 37 printf("maximummalloc size = %u bytes\n", maximum); 38 39 return0; 40 41 }
嵌入式100题(018):在1G内存的计算机中能否malloc(1.2G)?为什么?
标签:for 十六 count col main erro lang sizeof style
原文地址:https://www.cnblogs.com/swk0918/p/14444979.html