Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc()在macOS上的64位进程上有哪些限制?_Macos_Memory Management_Malloc_Virtual Memory - Fatal编程技术网

malloc()在macOS上的64位进程上有哪些限制?

malloc()在macOS上的64位进程上有哪些限制?,macos,memory-management,malloc,virtual-memory,Macos,Memory Management,Malloc,Virtual Memory,一位程序员同事声称,由于内存碎片,他的64位Mac程序一直在耗尽内存。我反驳说,这是不可能的,因为我知道程序总共只分配了大约1-2 TB的内存,而且大多数分配都在40-200字节的范围内,即使它们是数百万字节 我认为,由于内存分配器无法在地址空间中找到所请求大小的可用间隙,因此不可能以分配请求失败的方式分割64位地址空间 我的信念是基于这样的理解:几乎整个地址空间(64位)都是可用的。也许只有62位 因此,我想知道是否还有其他限制可能导致他的问题。例如,整个64位地址空间真的可用吗,或者只有更小

一位程序员同事声称,由于内存碎片,他的64位Mac程序一直在耗尽内存。我反驳说,这是不可能的,因为我知道程序总共只分配了大约1-2 TB的内存,而且大多数分配都在40-200字节的范围内,即使它们是数百万字节

我认为,由于内存分配器无法在地址空间中找到所请求大小的可用间隙,因此不可能以分配请求失败的方式分割64位地址空间

我的信念是基于这样的理解:几乎整个地址空间(64位)都是可用的。也许只有62位

因此,我想知道是否还有其他限制可能导致他的问题。例如,整个64位地址空间真的可用吗,或者只有更小的地址空间子集可用于分配?或者对虚拟页面的总数有限制吗

苹果公司似乎没有提供这方面的任何信息

我在中找到了一些关于限制的提示,但参考文献不支持这样的建议,例如总限制在128 TB左右。例如,该限制是指可以分配给任何进程的总量,还是指所有进程的总量,是指分配的总量,还是指可以分配的地址范围

也就是说,如果128 TB是malloc可以返回的总地址范围,并且如果这是所有进程的一个范围,那么我可以想象这会导致上述问题。但真的是这样吗

最终的答案可能在达尔文的源代码中找到。有人掌握了它并且可以在这里总结它吗