【发布时间】:2014-04-01 10:22:55
【问题描述】:
我认为使用静态变量可能会导致代码的可读性不明确,但没什么特别的。但是现在,我知道有 5 个数据段:文本、数据、bss、堆、堆栈。文本段用于代码,数据段。用于声明的变量,bss seg。用于未声明的变量,堆用于指针,堆栈用于函数变量。
最好不要使用静态变量而不是局部变量来最小化程序在运行时在计算机上占用的大小?
我很确定静态变量和全局变量保存在 bss 或数据段中。而且编译后bss和数据段的大小没有变化。而对于堆和栈来说,一旦使用它们就会被释放,所以不用担心大小。
我这样想对吗?
【问题讨论】:
-
静态变量通常会使你的代码不可重入,所以你应该尽量避免它们。
-
您应该根据需要使用存储类型(如每种语言功能)(无论存储在何处)。如果您需要静态的东西,请将其设为
static。如果您需要自动执行某些操作,请将其设为“本地功能”,即自动执行。此外,几乎可以肯定,自动存储不仅更安全(在可重入方面)而且速度更快。 -
我相信这些问题只与非常小的内存环境相关,例如嵌入式微控制器,其中可执行文件的大小可能很重要。对于所有其他机器,尤其是 1985 年以后的任何 PC,标准只是适合您使用的存储类别。另请注意,虽然具有静态存储持续时间的对象是零初始化的,但这种初始化不仅非常便宜,而且每次程序运行只发生一次。
-
@SergeyL。让我的代码可重入总是好的吗?除了不使用静态变量之外,编写可重入代码还有什么好的做法?