【发布时间】:2011-04-15 18:55:39
【问题描述】:
我听说过在 C++ 动态内存分配的上下文中多次使用“内存碎片”这个术语。我发现了一些关于如何处理内存碎片的问题,但找不到处理它本身的直接问题。所以:
- 什么是内存碎片?
- 如何判断内存碎片是否是我的应用程序的问题?哪种程序最有可能受到影响?
- 处理内存碎片的常用方法有哪些?
还有:
- 我听说大量使用动态分配会增加内存碎片。这是真的?在 C++ 的上下文中,我了解所有标准容器(std::string、std::vector 等)都使用动态内存分配。如果在整个程序中使用这些(尤其是 std::string),内存碎片是否更可能成为问题?
- 如何在 STL 密集型应用程序中处理内存碎片?
【问题讨论】:
-
已经有很多很好的答案,但这里有一些来自实际应用程序 (Firefox) 的图片,其中内存碎片是一个大问题:blog.pavlov.net/2007/11/10/memory-fragmentation
-
以下是 Marius 发布的链接的更新位置:pavlovdotnet.wordpress.com/2007/11/10/memory-fragmentation
-
一个非常有趣的现实世界问题示例(魔法元素战争):youtu.be/_zD33Hrbo4Y
标签: c++ memory heap-memory fragmentation