不使用静态变量的原因?

时间:2014-04-01 10:22:56

标签: c++ c

我认为使用静态变量可能会导致代码的可读性模糊,但没有什么特别之处。但现在,我知道有5个数据文章:文本,数据,bss,堆,堆栈。文本段用于代码,数据段。是声明变量,bss seg。对于未声明的变量,堆用于指针,而堆栈用于函数变量。

最好不要在局部变量上使用静态变量来最小化程序在运行时在计算机上占用的大小吗?

我很确定静态变量和全局变量都保存在bss或数据段中。编译后,bss和数据段的大小不会改变。对于堆和堆栈,它们一旦被使用就会被释放,因此无需担心大小。

我是否正确地想到了这一点?

2 个答案:

答案 0 :(得分:3)

  

文本段用于代码,数据段。是声明变量,bss seg。用于未声明的变量

到目前为止你是对的。

  

堆用于指针

没有。堆是通过malloc()分配的数据,对于C ++,是new

指针存储在你放置它们的任何地方(数据,bss,堆栈)。

  

并为函数变量堆栈。

对于函数参数。

  

最好不要在局部变量上使用静态变量来最小化程序在运行时在计算机上占用的大小吗?

变量存在时的大小相同(数据/ bss与堆栈相比);如果它不存在,基于堆栈的方法将获胜。

基于堆栈的方法在其他方面也有所获得:重入(如前所述)和可读性。

  

对于堆和堆栈,它们一旦被使用就会被释放,因此无需担心大小。

当然你也要担心这里的尺寸。只是去尝试分配一百万个16 MiB的块(至少在32位机器上),你会看到......

您应该在需要时使用static变量,如果不是,则应使用其他变量。

答案 1 :(得分:0)

当您声明变量static时,这意味着必须使用0进行初始化。所以

是编译器使用0初始化它的额外工作。所以如果你说了

100变量然后编译器的工作将是100次,而不是声明它们

automatic。但automatic变量未使用任何值初始化,因此它们包含

garbage。因此,建议不要在需要时使用static