我是新手,我正在学习如何用C ++编程。
所以我的问题是:每次循环迭代时,while循环中的函数调用会花费内存吗?
示例:
int count = 0;
while (count < 10)
{
function_call(); // Will this consume 10x more memory?
++count;
}
答案 0 :(得分:1)
没有。 †
您正在调用您的函数10次,因此您的函数使用的内存将被使用10次。但是只有在它已经结束执行之后才会再次调用该函数,因此它使用的任何资源都已经解除分配。
所以最后,它使用相同数量的内存,只需要保持10倍。
†:假设您的功能没有泄漏内存。
它将在不释放的情况下手动分配的任何内存将保持使用状态。因此,如果您的函数泄漏N个字节,该循环将泄漏10个N字节。但是,我们希望你不要泄漏任何东西。 ;)
答案 1 :(得分:0)
这个问题含糊不清,因为C ++有两种类型的内存,动态和自动(通常称为堆和堆栈),它们具有不同的特性。
int count = 0;
while (count < 10) {
function_call(); // Will this consume 10x more memory?
++count;
}
1)这会消耗10倍以上的自动记忆吗?
答案 - 没有。在作用域条目时分配自动内存,并在作用域退出时释放。循环重复调用function_call()将在每次调用时“重新开始”。
2)这会消耗10倍以上的动态内存吗?
答案 - 对你提供的内容并不了解。
否 - 如果function_call()不使用动态内存
否 - a)如果function_call()'使用'有限量的动态内存 用new()和。获得 b)在返回之前使用delete释放所有动态内存。
否 - a)如果function_call'使用'获取的有限量的动态内存 用new()和 b)different_function_call适当地释放内存。
Research term for you: object lifetime. Some dynamic memory
needs to exists longer than the lifetime of the function_call.
Several other answers mentioned 'memory leaking'. I consider this a
coding error, and thus not relevant to your question.
是 - a)如果function_call'使用'获取的有限数量的动态内存 用new()和 b)没有其他代码发布它,和 c)进程(包含function_call)不会终止。
On most OS's, terminating the process in which this code runs will
cause the release of all dynamic memory (and other resource) back
to the OS's control, and no longer accessible to the terminated
process (or any other process in the form created).
If it is possible that this process can run until dynamic memory is
exhausted, I think what happens next is UB (undefined behavior).