c++ - 不使用静态变量的原因?

标签 c++ c

我认为使用静态变量可能会导致代码的可读性不明确,但没什么特别的。但是现在,我知道有 5 个数据段:text、data、bss、heap、stack。文本段用于代码,数据段。用于声明的变量,bss seg。用于未声明的变量,堆用于指针,栈用于函数的变量。

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

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

我这样想对吗?

最佳答案

Text segment is for code, data seg. is for declared variables, bss seg. is for undeclared variables

到目前为止你是对的。

heap is for pointers

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

指针存储在您放置它们的任何位置(数据、bss、堆栈)。

and stack for variables of functions.

对于函数参数。

Would it be better not to use static variable over local variable to minimize the size the program takes on computer when running?

变量存在时大小完全相同(在 data/bss 中与在堆栈中);如果不存在,则基于堆栈的方法获胜。

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

And for heap and stack, they get released once used, so there is nothing to worry about size.

当然你也必须担心这里的大小。只需尝试分配一百万个大小为 16 MiB 的 block (至少在 32 位机器上),您就会看到...

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

关于c++ - 不使用静态变量的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22783040/

相关文章:

c++ - 如何开发跨平台的C++项目?

C++ 继承 : Calling subclass function of template

c++ - 排列之间的差异

c - c 中的一个简单 strtod() 示例

c - 完全持久的 B+ 树

c++ - 为什么我们不能使用整数指针声明一个数字数组

c++ - Visual Studio 2012 C++ ATL/COM

c++ - 将模拟对象作为函数的参数传递

c - as400 ILE C 全局变量多重重定义

c - Linux 中的 Fifos 数据包模式