我们应该全局声明一个向量还是在递归函数中传递它以减少内存使用
Should we declare a vector as constant globally or pass it in a recursive function in order to reduce memory usage?
我需要在递归函数中使用向量数组。我应该将该向量全局声明为常量还是直接从 c++ 中的 main 函数传递它?推荐哪种方法?前一种方法消耗的内存是否比后一种方法少?在每个递归调用中是否创建了矢量数组的单独副本?
我不想修改数组。我只想在每个递归调用中访问数组的所有元素。有人能告诉我这两种方法在记忆和时间方面的区别吗?
第一种方法
const vector<int> array = {1,2,3,4,5};
void fun(int index)
{
// some ending condition
// only access array(no modification)
// recusive call
fun(index+1);
}
int main()
{
fun(a,0);
return 0;
}
第二种方法
void fun(vector<int> &array,int index)
{
// some ending condition
// only access array(no modification)
// recusive call
fun(array,index+1);
}
int main()
{
vector<int> a = {1,2,3,4,5};
fun(a,0);
return 0;
}
内存中有一个名为堆栈的部分。您的函数调用存储在那里。如果将vector
作为值传递,则会浪费内存,因为每个调用都有自己的副本。相反,您需要将其作为引用传递,因为在这种情况下,vector
将被重用。
可以重构代码以使用此vector
作为其成员的class
。
使用全局变量会节省大量内存,但它是一种反模式,会导致严重的问题,您需要尽可能避免它。
编辑
如果向量从未被修改,那么全局使用它是可以的,但在这种情况下,它应该是常量的。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 哪个递归函数将花费更少的内存
- 我们应该全局声明一个向量还是在递归函数中传递它以减少内存使用
- 在递归函数中释放内存时堆损坏
- 可以valgrind报告丢失块的内存地址(用于调试递归函数调用)
- 内存泄漏可能是由于递归函数造成的
- 内存管理不良?类成员(布尔值)值大于 1,在递归函数中
- 使用std::unique_ptr的递归函数导致内存泄漏
- 递归函数的内存分配