在过去,当我处理长时间运行的 C++ 守护程序时,我不得不处理堆碎片问题。像保留我的大型分配池这样的技巧是必要的,以避免耗尽连续的堆空间。
64 位地址空间是否仍然存在这个问题? 对于我来说,性能不是问题,因此我更喜欢简化我的代码,不再处理类似缓冲池之类的事情。有没有人对这个问题有任何经验或故事?我正在使用 Linux,但我想许多相同的问题也适用于 Windows。
在过去,当我处理长时间运行的 C++ 守护程序时,我不得不处理堆碎片问题。像保留我的大型分配池这样的技巧是必要的,以避免耗尽连续的堆空间。
64 位地址空间是否仍然存在这个问题? 对于我来说,性能不是问题,因此我更喜欢简化我的代码,不再处理类似缓冲池之类的事情。有没有人对这个问题有任何经验或故事?我正在使用 Linux,但我想许多相同的问题也适用于 Windows。
如果您的进程确实需要千兆字节的虚拟地址空间,那么升级到64位确实可以立即消除解决方法的需求。
但是值得计算一下您预计进程将使用多少内存。如果只有大约1GB或更少的内存,即使是疯狂的碎片也不会让您用完32位地址空间 - 内存泄漏可能是问题所在。
(顺便说一句,Windows更加严格,因为它为每个进程保留了不礼貌的地址空间)。