我听说在C++动态内存分配的上下文中使用了几次"内存碎片"这个术语.我发现了一些关于如何处理内存碎片的问题,但找不到直接处理它本身的问题.所以:
也:
我们偶尔会遇到问题,即由于内存分配失败,我们长时间运行的服务器进程(在Windows Server 2003上运行)引发了异常.我们怀疑这些分配是由于内存碎片而失败的.
因此,我们一直在寻找一些可能对我们有帮助的替代内存分配机制,我希望有人可以告诉我最好的一个:
1)使用Windows 低碎片堆
2)jemalloc - 用于Firefox 3
3)Doug Lea的malloc
我们的服务器进程是使用跨平台的C++代码开发的,因此任何解决方案都可以理想地跨平台(do*nix操作系统会遭受这种类型的内存碎片吗?).
另外,我认为LFH现在是Windows Server 2008/Vista的默认内存分配机制吗?如果我们的客户只是升级他们的服务器操作系统,我当前的问题会"消失"吗?
对于函数中使用的所有临时向量使用一个向量类成员,从内存管理站点看起来有什么区别:
class A
{
private:
vector<Type> m_vector;
}
void fnc()
{
m_vector.clear();
m_vector.push_back();
//further operations on vector
}
Run Code Online (Sandbox Code Playgroud)
并在函数内创建临时向量:
void fnc()
{
vector<Type> vector;
//further operations on vector
}
Run Code Online (Sandbox Code Playgroud)
我认为第一个选项导致较少的内存碎片,因为我们正在进行一次分配并使用此区域,在第二种情况下,我们为不同函数的向量分配内存,这会导致内存碎片.
这个向量用法的优点和缺点是什么?当我的课程在其功能中需要很多向量时,我应该使用哪一个?从记忆管理网站看哪一个更好看?