1
假設我已經在兩個不同的文件中定義了兩個靜態變量(具有相同的名稱),它們將存儲在bss節中。兩個未初始化的靜態變量之間的區別如何
//File1.c
static int st;
//File2.c
static int st;
但是,它們在運行時如何區分哪一個屬於哪個文件。
我發現幾個主題在這裏,但沒有回答我的問題 -
假設我已經在兩個不同的文件中定義了兩個靜態變量(具有相同的名稱),它們將存儲在bss節中。兩個未初始化的靜態變量之間的區別如何
//File1.c
static int st;
//File2.c
static int st;
但是,它們在運行時如何區分哪一個屬於哪個文件。
我發現幾個主題在這裏,但沒有回答我的問題 -
沒有必要在運行時的名稱。該名稱僅適用於您和C編譯器。 C編譯器知道它屬於哪個文件,它定義的文件。這是足夠的信息。
這兩個變量都以它們各自的名稱存儲在.bss段中,但位於不同的存儲位置。這就是他們的區別。
您可以確認自己,他們是如何存儲使用objdump
:
$ cat foo1.c
static int foo = 1;
$ cat foo2.c
static int foo = 2;
$ cat main.c
int main(void) { return 0; }
$ gcc -g -O0 -o foo foo1.c foo2.c main.c
$ objdump -d -j .data foo
test: file format elf64-x86-64
Disassembly of section .data:
00000000006008a8 <foo>:
6008a8: 01 00 00 00 ....
00000000006008ac <foo>:
6008ac: 02 00 00 00 ....
非常感謝你.. – sas
'但是如何分化他們之間做哪一個屬於哪個文件在運行time.' ..這是編譯器的功能和鏈接器。從你發佈的第二個鏈接閱讀[這個答案](http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-c-c/109120#109120),談論範圍。 – txtechhelp
很好..令人信服的... – sas