我有一个C ++程序,其格式如下:
int main(){
int answer;
...
MEMORY_CONSUMING_DATA_ARRAY temp;
a few operations on the above;
answer=result of these operations;
... //More code
}
也就是说,我有一小段代码似乎不保证自己的功能,但它使用了大量的内存。
我想让耗尽内存的变量(一个类)在有限的范围内存在以产生结果,然后将其销毁。辅助函数可以很容易地做到这一点,但在我正在工作的场景中似乎过度杀戮。
关于如何做到这一点的任何想法?
谢谢!
答案 0 :(得分:13)
如果您需要破坏:
int main() {
int answer;
...
{ // << added braces
MEMORY_CONSUMING_DATA_ARRAY temp;
a few operations on the above;
answer=result of these operations;
}
... //More code
}
因此适用于动态分配支持的集合/对象,例如std::vector
。
但是对于大堆栈分配......你是编译器的怜悯。编译器可能会决定在函数返回后清理堆栈,或者可以在函数内逐步执行清理。当我说清理时,我指的是你的功能需要的堆栈分配 - 而不是破坏。
要扩展此:
破坏动态分配:
int main() {
int answer;
...
{ // << added braces
std::vector<char> temp(BigNumber);
a few operations on the above;
answer=result of these operations;
// temp's destructor is called, and the allocation
// required for its elements returned
}
... //More code
}
与堆栈分配:
int main() {
int answer;
...
{
char temp[BigNumber];
a few operations on the above;
answer=result of these operations;
}
// whether the region used by `temp` is reused
// before the function returns is not specified
// by the language. it may or may not, depending
// on the compiler, targeted architecture or
// optimization level.
... //More code
}
答案 1 :(得分:3)
贾斯汀的回答很好,但如果你一次又一次地执行这个操作,那么你可能想重复使用这个记忆。
修改强>
正如所指出的那样静态会使内存不在堆栈上分配,这可能对你有利,如果你每次都需要将内存归零,如果你每次都要复制相同的数量,那么它也是可选的。要读过这一点,那么你可以保存对零编号或其他初始化调用的调用。
int main(){
int answer;
...
{
static MEMORY_CONSUMING_DATA_ARRAY temp; // make this static or a member perhaps
temp = 0; // initialise it every time to clear the memory or zeromemory or other op
a few operations on the above;
answer=result of these operations;
}
... //More code
}