C++ 使用预先知道的模式分配内存

C++ 使用预先知道的模式分配内存,c++,memory-management,optimization,pattern-matching,C++,Memory Management,Optimization,Pattern Matching,我有一个应用程序,其中malloc/free操作的顺序是预先知道的。我想做一个预计算来最小化最大内存使用量。有关于这方面的资源吗(c++实现/研究论文) 更准确地说,相同的malloc/free操作序列会重复很多次(在每个周期结束时,所有内容都会被释放)。所以我可以负担一些计算来优化内存使用 假设您想要实现的是最大限度地减少分配内存所花费的时间,并可能改进缓存位置,实际上这听起来相当简单 只需选择内存管理器(编写一个或使用一个预先存在的内存管理器,如囤积)。然后,让内存管理器在程序开始时分配一个

我有一个应用程序,其中malloc/free操作的顺序是预先知道的。我想做一个预计算来最小化最大内存使用量。有关于这方面的资源吗(c++实现/研究论文)


更准确地说,相同的malloc/free操作序列会重复很多次(在每个周期结束时,所有内容都会被释放)。所以我可以负担一些计算来优化内存使用

假设您想要实现的是最大限度地减少分配内存所花费的时间,并可能改进缓存位置,实际上这听起来相当简单

只需选择内存管理器(编写一个或使用一个预先存在的内存管理器,如囤积)。然后,让内存管理器在程序开始时分配一个周期内使用的最大内存量

主要的问题是计算这个内存量。一个简单的解决方案是使用一个分配器完成一个周期,该分配器只需将malloc/free与一个计数器包装在一起,该计数器跟踪当前内存使用情况和最大使用情况。在你的周期结束时,这个最大值就是你在开始时应该分配多少

需要注意的一点是,分配内存中的碎片可能会导致需要额外分配。这通常可以通过一个好的内存管理器来避免。在最坏的情况下,您可能必须分别跟踪为每个分配大小分配的最大内存

作为旁注,如果使用C++,为什么使用MalC/C++/NeX/DELATION?< /P> 更准确地说,相同的malloc/free操作序列是 重复多次(在每个循环结束时,所有内容都被释放)。所以 我可以负担一些计算来优化内存使用

对于内存使用,这不是一个很难解决的问题。相同的内存将被重新分配用于相同的目的,因此,如果您反复分配相同的内存块,就不会“浪费”内存

既然您在说,
malloc
free
,我们是在谈论堆的旧式“C”类型用法吗?所以没有构造函数或析构函数可担心?那么为什么不创建给定类型的元素数组呢

   struct X
   {
      ...
   };
旧代码:

   X* px[10];
   for(i = 0; i < 10; i++)
   {
      px[i] = malloc(sizeof(X));
      ...
   }
X*px[10];
对于(i=0;i<10;i++)
{
px[i]=malloc(sizeof(X));
...
}
相反,你应该:

   X* px[10];
   X* xx = malloc(sizeof(X)*10);
   for(i = 0; i < 10; i++)
   {
      px[i] = &xx[i];
   }
X*px[10];
X*xx=malloc(sizeof(X)*10);
对于(i=0;i<10;i++)
{
px[i]=&xx[i];
}

我认为您也需要指定所使用的编程语言。我不知道有关于这方面的文章,但“相同的malloc/free操作序列重复了很多次(在每个周期结束时,所有内容都被释放了)”,听起来您可以创建特定大小的私有堆,对它们进行分配,然后释放整个堆。您使用哪种平台?理想情况下,我希望独立于平台(例如windows和unix)。出于好奇,在哪些平台上可以实现此解决方案?您能为允许此功能的私有堆的实现提供指针吗?在Windows中,您有
HeapCreate
/
HeapFree
,它允许您一次释放整个堆。