在32位系统上,虚拟地址空间限制为4GB,因此对内存进行碎片整理非常重要,这样我们就不会因为碎片问题而耗尽地址空间。
但是,在64位系统中,我们的地址空间几乎无限制。为防止过度使用RAM或交换空间,当未使用的块大小超过4096(页面大小)时, free 函数可能只将内存返回给操作系统,并且再也不会使用该地址。因此,虽然我知道释放RAM很重要,但我说碎片整理不是。
所以,我的问题是内存碎片整理是否仍然相关。如果没有,那么也许我们可以为64位系统提供不同类型的 malloc / free ,如果不尝试对内存进行碎片整理,则效率可能更高。至少对于我们知道不会使用整个256 TB地址空间的应用程序。你有什么看法?
答案 0 :(得分:3)
它总是相关的,但不是因为缺乏地址空间,而是因为记忆的一致性。由于32位系统,我们已经有许多用于低碎片分配器和自由空间合并分配器的算法,并且没有理由在64位系统上忽略它们,它们根本不会增加很多开销和摊销的开销甚至可以在64位系统上 drop 。
但是,在64位系统中,我们的地址空间几乎无限制。
甚至没有关闭,大多数系统只有16TB的可寻址虚拟空间,因为目前只有44位用于寻址as per AMD64's specs(内核地址空间也使用高位)。