gpt4 book ai didi

c++ - 如何解决 C++ 服务器程序中的堆碎片问题?

转载 作者:太空狗 更新时间:2023-10-29 20:32:37 25 4
gpt4 key购买 nike

堆碎片可能会导致预计会连续运行数月的服务器应用程序突然开始出现故障,认为它内存不足。

让我们假设我已尽最大努力减少我的 VC++ 服务器应用程序中的运行时堆碎片,但它仍然会累积并导致问题。例如,我可以每月或每处理 50 万个请求自动重启应用程序 - 安全地停止它并安全地重新启动一个新堆。我还能做些什么来解决堆碎片问题?

最佳答案

与此处相同的答案:How to detect and estimate heap fragmentation in my C++ program?

编写适合您的内存分配模式的内存管理器。或者买一个(例如 smart-heap)。

由于碎片取决于您的内存分配模式/ Release模式,因此很难给出更好的答案。但是您可以查看固定大小的分配器或查看 smart heap page。他们如何处理分配。关于这个主题也有很多论文。例如尝试 www.memorymanagement.org

或者您可以查看 FastMM4 - 它是开源的,但在 Pascal/Delphi 中

还有一些编程技巧。最值得注意的是:Object Pool .在这种情况下,没有碎片,因为对象被重新使用而不是被释放。但我认为固定大小的分配器比对象池性能更好。以这种方式使用的对象池只是一个“穷人”的固定大小分配器。

关于c++ - 如何解决 C++ 服务器程序中的堆碎片问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1592804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com