0

据我所知,全局静态变量存储在 .Data 和 .Bss 段中。

(global) static int i; ---> .BSS
(global) static int i=10; ---> .Data

如果是这种情况,具有相同全局静态变量的多个文件如何从整个程序共有的内存位置访问变量。

前任。

test.c

static int i=10;

void fun(){
   printf("%d", i );
}

test1.c

static int i=20;

void fun1(){
   printf("%d", i);
}

test.c 和 test1.c 如何从 .Data 段解析 i?

我的第二个问题是存储在函数内部定义的程序内存局部静态变量的哪一部分?

4

2 回答 2

2

涉及各种“命名空间”,您应该想象每个目标文件都包含其自己的静态变量“命名空间”。

请记住,名称不存储在.bss(或.data)段内。

为了简化图片,想象一下当编译成foo.o“汇编器”时,static int i;里面的名字foo.c会是这样的$foo.o$i

情况并非完全如此,但您明白了……实际上,您可以理解static变量名称不会生成到目标文件中。该静态变量仍然(粗略地说)在.bssor中.data,但它的名称不可见。

使用GNU objdump探索对象ELF可重定位文件。

于 2013-09-28T15:34:55.230 回答
0

问题第二部分的简化解释:-

1.Auto variables are stored in stack segment.

2.Uninitialized global variables are stored in BSS segment.

3.Initialized global variables and global static variables are stored in data segment.

***4.Local static variables are stored in data segment of the memory.***

变量的范围和生命周期

自动变量

Scope:-    Only the function in which it is declared
Lifetime:- From when control enters the function in which it is declared till when control exits the function

全局变量

Scope:- Global variables can be accessed from anywhere in the program
Lifetime:- Entire life of program execution

全局静态

Scope:- Global static variables can be accessed from anywhere inside the file in which they are declared
Lifetime:- Entire life of program execution

局部静态

Scope:- Local static variables can be accessed inside the function where it is declared
Lifetime:- Entire life of program execution
于 2014-03-07T17:44:51.260 回答