在64位系统中,malloc()函数失败的原因有哪些?
我的具体问题是在64位系统上尝试malloc()一个10GB巨大的RAM块。该机器拥有12GB RAM和32GB交换空间。是的,这个malloc()极端了,但为什么会成为问题呢?这是在Windows XP64下使用Intel和MSFT编译器。malloc()有时成功,有时失败,大约50%的概率。8GB的malloc()总是有效的,20GB的malloc()总是失败的。如果一次malloc()失败,重复请求将不起作用,除非我退出进程并再次启动新进程(然后才有50%的成功机会)。没有其他大型应用程序在运行。即使在刚刚重新启动后,它也会发生。
我可以想象,在32位计算机上,如果您使用完可用的32(或31)位地址空间,以至于没有足够大的地址范围可分配给您的请求,那么malloc()会失败。
我也可以想象当你已经使用了你的物理RAM和硬盘交换空间时,malloc()会失败。但这对我来说不是问题。
但是,还有什么其他原因导致malloc()失败吗?我想不出其他原因。
我更关心的是一般的malloc()问题,而不是我的具体示例,我可能会用内存映射文件来替换它。失败的malloc()只是一个谜题... 希望理解你的工具并对基础知识不感到惊讶。