c++ - 如何防止递归函数中不必要的内存使用

标签 c++ memory recursion memory-management

我刚刚编写了一个递归函数,我突然意识到我在函数中使用的所有变量都将保留在内存中,直到递归中断。如果我递归多次或为后续递归函数调用中未使用的变量分配大量内存,这是否会导致大量内存使用浪费?

例如下面的recurse中只用到了vec2temp_inttemp_vec会继续无谓的占用内存。

int recurse(std::vector<int> arg_vec) {
  int temp_int i;

  std::vector<int> temp_vec;
  std::vector<int> vec2;

  //... do some processing with arg_vec and temp_vec and result is stored in vec2
  recurse(vec2)

  return if (some condition met);
}

然后我应该使用新命令分配所有内存并在函数调用之前删除它们吗?还是有其他方法可以解决这个问题

最佳答案

您可以使用范围大括号来指定范围。范围内声明的任何内容都会在范围末尾销毁。

int recurse(std::vector<int> arg_vec) {
  int temp_int i;

  std::vector<int> vec2;
  {
    std::vector<int> temp_vec;

    //... do some processing with arg_vec and temp_vec and result is stored in vec2
  } // temp_vec is destructed here. vec2 is not because it is outside this scope.
  recurse(ec2)

  return if (some condition met);
}

关于c++ - 如何防止递归函数中不必要的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592338/

相关文章:

c++ - 摆动/摆动相机

c++ - 将负文字作为无符号参数传递时,g++ 会发出警告吗?

java - Java “Foo f = new Foo() ”中的对象初始化是否与在C中将malloc用作指针相同?

string - 如何计算字符串变量使用的实际内存?

php - 为什么整数值占用 72 字节的内存?

java - 如何在没有任何 for 循环的情况下递归地解压缩字符串?

c++ - 混合从 C 和 C++ 编译的目标文件时出现链接器错误

c++ - 模板类和根据迭代调用不同的构造函数

javascript - 递归触发错误 "Maximum call stack size exceeded error"

JavaScript:带有 Promise 的递归函数,解析返回 "undefined"