gpt4 book ai didi

c - 将函数变量声明为局部而不是全局会不会影响效率?

转载 作者:行者123 更新时间:2023-12-05 01:19:41 27 4
gpt4 key购买 nike

我实际上已经通过测试看到了一些结果,但我想知道哪种方式更好以及为什么。

问题 #1:当我一次又一次地调用该函数时,是否每次都会声明局部变量?我知道最好在尽可能窄的范围内声明变量。但我无法阻止自己考虑将其声明为全局变量并使其仅声明一次,而不是在每次函数调用中声明。或者,它是否在每次函数调用中再次声明?我知道局部变量的范围只是那个函数。因此,当它离开该函数时,它必须忘记该变量,因为它超出了它的范围,对吧?

问题#2:当我有一些函数变量需要存储它以前的内容时(例如定时器计数器变量),哪种方式更好:将它们声明为全局变量或声明它们作为静态局部变量?每当我调用该函数时,我都不需要它们获取初始值,我已经在需要时将它们设置为零等。

最佳答案

Question #1: Do local variables get declared every time when I call that function again and again?

A1:,但这真的不是问题。

声明一个局部变量意味着在该函数的栈帧中为该变量在栈上留出空间。声明变量全局意味着在可执行文件的数据部分(如果变量已初始化)或 BSS 部分(如果未初始化)为该变量创建空间。

在堆栈上分配是零成本的。在函数入口处,堆栈帧的大小会为函数的所有局部变量腾出空间。一个多一个少都无所谓。静态分配(对于全局变量)要快一点,但是您只能得到那个变量。这在以后的某个时候可能会成为一个大问题,例如如果你想让你的程序多线程,你的函数可重入,或者你的算法递归。它也可能成为调试过程中的一大麻烦,在您寻找错误时浪费数小时的非生产时间。

(这是所有的要点:性能差异真的可以忽略不计。另一方面,您可以浪费在充满全局变量的次优设计上的时间可能非常重要。)

Question #2: [...] which way is better: to declare them as a global variable or to declare them as a static local variable?

A2:从架构的角度来看,尽可能避免全局变量在一些特定情况下它们是有意义的,但你知道当你看到他们时。如果您可以在没有全局变量的情况下使其工作,请避免使用它们。 (实际上,对于静态局部变量也是如此。它们比全局变量更好,因为它们的范围有限,并且在某些情况下它们是有意义的,但局部变量确实应该是您心目中的“默认”。)

关于c - 将函数变量声明为局部而不是全局会不会影响效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713331/

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