日期:2014-05-16  浏览次数:20735 次

linux 进程的用户空间使用?
p=malloc(2.8*1024*1024*1024);

linux   进程的用户地址空间是3G,为什么上面的语句返回0?

------解决方案--------------------
2.8? 浮点数?
------解决方案--------------------
申请的太大了吧,用户空间的寻址空间好像没有那么大
------解决方案--------------------
浮点数的原因吧.
Linux用户级进程空间好象没那么大空间可分配, 用kmalloc应该能分到.
------解决方案--------------------
用户空间也就3G,其中还包括很多进程的代码段,数据段,BSS段,堆,栈,环境变量,参数等空间,谁也不知道用了多少,能不能申请成功随机性很大。
------解决方案--------------------
16位计算机系统的最多可支持4G内存,其中1G为内核使用,3G为用户空间。这3G内存空间里面你还要运行很多其他程序,所以是你申请的太大了。
------解决方案--------------------
有趣的实验

对于楼上xixi的说法有不同看法,这个内存空间不需要考虑其他程序,因为是虚拟内存空间,每个进程的空间大小都是3G。这个是收GLibc实现有关,我认为和编译器无关。另外这3G中也不可能全部用来malloc啊,还有代码段、数据段、栈段等等,heap只是其中一部分而已,怎么可能3G都给你呢。

I guess you should read some references before your experiment.