相关疑难解决方法(0)

静态变量存储在C和C++中的哪个位置?

在可执行文件的哪个段(.BSS,.DATA,其他)中存储了静态变量,以便它们没有名称冲突?例如:


foo.c:                         bar.c:
static int foo = 1;            static int foo = 10;
void fooTest() {               void barTest() {
  static int bar = 2;            static int bar = 20;
  foo++;                         foo++;
  bar++;                         bar++;
  printf("%d,%d", foo, bar);     printf("%d, %d", foo, bar);
}                              }
Run Code Online (Sandbox Code Playgroud)

如果我编译两个文件并将其链接到重复调用fooTest()和barTest的main,则printf语句将独立增加.有意义,因为foo和bar变量是翻译单元的本地变量.

但是存储分配在哪里?

需要明确的是,假设您有一个工具链可以输出ELF格式的文件.因此,我相信,有将一些空间,对于那些静态变量的可执行文件保留.
出于讨论目的,我们假设我们使用GCC工具链.

c c++ compiler-construction

169
推荐指数
10
解决办法
18万
查看次数

const变量和静态变量之间有什么区别?我应该选择哪个?

我从RFC 246中知道这一点:

  • 常量声明常量值.它们代表一个值,而不是内存地址.这是人们可以达到的最常见的事情,并且static几乎在所有情况下我们今天都会知道它.
  • 静态声明全局变量.这些代表一个内存地址.它们很少使用:主要用例是全局锁,全局原子计数器以及与传统C库的接口.

当我试图维护一张桌子时,我不知道两者之间究竟有什么不同.

我应该选择哪一个?

static const rust

4
推荐指数
3
解决办法
1403
查看次数

标签 统计

c ×1

c++ ×1

compiler-construction ×1

const ×1

rust ×1

static ×1