我遇到了一个非常严格和严格的内存限制问题。我是 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_t
或uint16_t
范围为 -32768..32767 和 0..65535。 - 重新排列结构元素,使较大的元素排在前面,这样数据对齐就不会在结构中间留下死角。您通常也可以通过编译器选项来控制填充,但最好只是在一开始就优化布局。
- 使用开销不大的容器。例如,使用
vector
而不是list
。使用boost::ptr_vector
而不是包含shared_ptr
的std::vector
。 - 避免虚拟方法。您添加到结构或类的第一个虚方法会添加一个指向 vtable 的隐藏指针。
关于c++ - (C++) 寻找减少内存使用的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892334/