相关疑难解决方法(0)

什么是内存碎片?

我听说在C++动态内存分配的上下文中使用了几次"内存碎片"这个术语.我发现了一些关于如何处理内存碎片的问题,但找不到直接处理它本身的问题.所以:

  • 什么是内存碎片?
  • 如何判断内存碎片是否对我的应用程序有问题?什么样的计划最容易受到影响?
  • 处理内存碎片的常用方法有哪些?

也:

  • 我听说使用动态分配可以增加内存碎片.这是真的?在C++的上下文中,我理解所有标准容器(std :: string,std :: vector等)都使用动态内存分配.如果在整个程序中使用它们(特别是std :: string),内存碎片更可能是一个问题吗?
  • 如何在STL繁重的应用程序中处理内存碎片?

c++ memory heap fragmentation

190
推荐指数
7
解决办法
7万
查看次数

如何解决内存碎片问题

我们偶尔会遇到问题,即由于内存分配失败,我们长时间运行的服务器进程(在Windows Server 2003上运行)引发了异常.我们怀疑这些分配是由于内存碎片而失败的.

因此,我们一直在寻找一些可能对我们有帮助的替代内存分配机制,我希望有人可以告诉我最好的一个:

1)使用Windows 低碎片堆

2)jemalloc - 用于Firefox 3

3)Doug Lea的malloc

我们的服务器进程是使用跨平台的C++代码开发的,因此任何解决方案都可以理想地跨平台(do*nix操作系统会遭受这种类型的内存碎片吗?).

另外,我认为LFH现在是Windows Server 2008/Vista的默认内存分配机制吗?如果我们的客户只是升级他们的服务器操作系统,我当前的问题会"消失"吗?

c++ memory windows

45
推荐指数
3
解决办法
4万
查看次数

矢量内存管理

对于函数中使用的所有临时向量使用一个向量类成员,从内存管理站点看起来有什么区别:

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)

我认为第一个选项导致较少的内存碎片,因为我们正在进行一次分配并使用此区域,在第二种情况下,我们为不同函数的向量分配内存,这会导致内存碎片.

这个向量用法的优点和缺点是什么?当我的课程在其功能中需要很多向量时,我应该使用哪一个?从记忆管理网站看哪一个更好看?

c++ vector

3
推荐指数
2
解决办法
528
查看次数

标签 统计

c++ ×3

memory ×2

fragmentation ×1

heap ×1

vector ×1

windows ×1