c -使较小的函数在内存方面通常更有效,因为变量被更频繁地释放



是否将工作划分为5个函数而不是一个大函数在C中更具内存效率,因为在给定时间内内存中的变量较少,因为堆栈帧更频繁地被释放?

答案是有很多局部变量,堆栈帧来自一个集中的主框架,而不是在彼此的顶部创建的。

我知道将函数分解成更小的函数的其他好处。请仅就内存使用情况回答这个问题。

依赖于语言和编译器。
对于像Python这样可以动态访问变量的语言(例如globals()['x']),您可以有效地减少每个变量在可访问范围内的时间,从而允许更频繁地回收内存。根据您的操作方式,您可能会迫使解释器保留更多的作用域,而作用域本身可能会使用额外的内存。例如,如果你从f1中取出一个块并使它成为f2,它从f1中被调用,你就增加了堆栈深度&必须保留的作用域的数量。

对于具有成熟编译器(如C)的编译语言,变量的内存通常只在实际需要时使用。所以你不能做很多编译器没有做的事情。

请记住,当您调用函数时,需要将局部变量从寄存器移到堆栈中,以及返回地址。因此,在某些情况下,如果将分解为从原始代码中调用的多个函数,则最终会得到更大的内存占用。
但也要意识到,如果一个函数只从一个地方调用,编译器很有可能将其内联。

所以总的来说,这很难预测,而且影响很小。

这就是我的哲学。我认为,除非您正在进行一些疯狂的科学计算,这些计算将调用几个不同的函数数百万次(从而使系统堆栈过载并导致stackoverflow),否则您最好拆分代码(显然不要太疯狂)。但是分解代码,特别是在面向对象代码中,是天赐之物(特别是对于调试和可读性而言)。最后,这是一个权衡的问题。

实际上,现在我想到了,如果你有相当数量的变量,并且堆栈来自集中式main,大多数人会相应地执行他们的应用程序/程序。

既然我不确定你是从哪里来的,如果你非常关注效率,看看这个问题和它的答案(与低层代码有关):

如何编写快速(低级)代码?

如果你真的/真的在谈论这个包围所有你标记的语言,尽管它们都是基于c的语言,它们实际上有非常不同的内存/内存模型(特别是因为Java在VM上运行)

相关内容

最新更新