c++ - (C++) 寻找减少内存使用的技巧

标签 c++ memory-management

我遇到了一个非常严格和严格的内存限制问题。我是 CPP 极客,我想减少内存使用量。请给我一些提示。


我的一个 friend 建议从我的结构中取出函数。 例如,而不是使用:

struct node{
   int f()
   {}
}

他推荐我使用:

int f(node x)
{}

这真的有用吗?

注意:我有很多我的结构的拷贝。


这里有一些更多的信息:

我正在为在线裁判的练习题编写某种线段树。我在结构中获取树节点。我的结构有这些变量:

  int start;
  int end;
  bool flag;
  node* left;
  node* right;

内存限制为 16 MB,我使用的是 16.38 MB。

最佳答案

根据您问题的潜台词,我猜测您的大部分内存使用是数据,而不是代码。这里有一些提示:

  • 如果您的数据范围有限,请充分利用它。如果整数的范围是 -128 到 127,则使用 char 而不是 int,或者如果它是 0 到 255,则使用 unsigned char。同样使用 int16_tuint16_t 范围为 -32768..32767 和 0..65535。
  • 重新排列结构元素,使较大的元素排在前面,这样数据对齐就不会在结构中间留下死角。您通常也可以通过编译器选项来控制填充,但最好只是在一开始就优化布局。
  • 使用开销不大的容器。例如,使用 vector 而不是 list。使用 boost::ptr_vector而不是包含 shared_ptrstd::vector
  • 避免虚拟方法。您添加到结构或类的第一个虚方法会添加一个指向 vtable 的隐藏指针。

关于c++ - (C++) 寻找减少内存使用的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892334/

相关文章:

PHP 内存耗尽错误、糟糕的代码或只是增加内存限制?

javascript - 在 Javascript 中执行尾端递归时是否必须手动释放内存

memory-management - 有人可以向我解释有关分页(虚拟内存)的图表吗?

C++ 扩展 ASCII 码

c++ - 第一维未分类类成员

c++ - Isspace 字符函数

iphone - 在 viewDidUnload 中设置为 nil,但在 dealloc 中释放

c++ - 覆盖析构函数是一种好习惯吗?

C++:NVI 和模板方法模式之间的区别?

algorithm - 伙伴内存系统中的最坏情况外部碎片