【发布时间】:2017-05-23 16:38:44
【问题描述】:
我的主管在我的 C 代码中看到了类似于:
size = f(some parameters);
int array[size];
他说最好用malloc 分配这样的数组。他的描述是这样的:
像这样在堆栈上分配它需要您的堆栈在程序的整个运行时保持有效。
我不知道他的意思,所以这与我记得的会议结束时他的措辞一样接近,但不知道实际含义。他是什么意思? (或者,也许有人可以解释不以这种方式声明数组的另一个原因)。
【问题讨论】:
-
你的记性很好。本地分配的数组不会:) 一旦你离开这个函数,这样一个定义分配的内存就会被释放。
malloced 内存不是这种情况,在您手动free之前,它一直处于分配状态。但是每一个都有用例,你不能说一个比另一个更好/ -
如果你不在函数之外泄漏
array,就不用担心终身问题,但另一个重要的问题是,如果大小导致堆栈溢出,则无法处理错误。 -
几乎可以肯定某处存在重复,但基本上,可以在堆栈上分配一个局部变量,但定义它的函数必须保持活动状态,并且所有其他引用该变量的函数调用必须由这个函数(或由 那些 调用的函数)生成。当声明局部变量的函数退出时,该变量将超出范围和生命周期。此外,堆栈上的可用内存大小与堆上的可用内存量相比是有限的。
-
@Alex this previous question 可能是一本好书。