首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用预先已知的模式进行内存分配

使用预先已知的模式进行内存分配
EN

Stack Overflow用户
提问于 2013-05-05 14:41:57
回答 2查看 190关注 0票数 2

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-05-05 15:32:47

假设您想要实现的目标是最大限度地减少分配内存所花费的时间,并尽可能提高缓存的局部性,实际上这听起来非常简单。

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

主要的问题是计算这个内存量。一个简单的解决方案是使用一个分配器经历一个周期,这个分配器除了包装malloc/free和一个跟踪当前内存使用情况和最大使用情况的计数器之外,什么也不做。在你的周期结束时,这个最大值就是你应该在开始时分配多少。

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

顺便说一句,如果你在使用C++,为什么你要使用malloc/free而不是new/delete呢?

票数 0
EN

Stack Overflow用户

发布于 2013-05-05 15:39:32

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

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

既然你说的是mallocfree,我们是在讨论堆的老式"C“类型的用法吗?所以不需要担心构造函数或析构函数?为什么不创建给定类型的元素数组,例如

代码语言:javascript
复制
   struct X
   {
      ...
   };

旧代码:

代码语言:javascript
复制
   X* px[10];
   for(i = 0; i < 10; i++)
   {
      px[i] = malloc(sizeof(X));
      ...
   }

取而代之的是:

代码语言:javascript
复制
   X* px[10];
   X* xx = malloc(sizeof(X)*10);
   for(i = 0; i < 10; i++)
   {
      px[i] = &xx[i];
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16382074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档