gpt4 book ai didi

c - 由于变量被更频繁地释放,使得较小的函数通常在内存方面更有效吗?

转载 作者:行者123 更新时间:2023-11-30 14:28:00 25 4
gpt4 key购买 nike

将工作划分为 5 个函数(与 C 中的一个大函数相比)是否会提高内存效率,因为在给定时间内存中的变量较少,因为堆栈帧被更频繁地释放?

给出的答案是有很多局部变量,并且堆栈帧来自集中式主线程,而不是在彼此之上创建。

我知道将函数分解为更小的函数的其他优点。请回答这个问题,仅涉及内存使用。

最佳答案

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

对于像 C 这样具有成熟编译器的编译语言,变量的内存通常只在实际需要时使用。因此,您将无法执行编译器尚未执行的操作。

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

总而言之,这很难预测,而且影响也很小。只做最易读的事情。

关于c - 由于变量被更频繁地释放,使得较小的函数通常在内存方面更有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com