2016-07-25 70 views
1

假設我已經在兩個不同的文件中定義了兩個靜態變量(具有相同的名稱),它們將存儲在bss節中。兩個未初始化的靜態變量之間的區別如何

//File1.c 
static int st; 

//File2.c 
static int st; 

但是,它們在運行時如何區分哪一個屬於哪個文件。

我發現幾個主題在這裏,但沒有回答我的問題 -

  1. Two static variables in same name(two different file) and extern one of them in any other file

  2. Where are static variables stored (in C/C++)?

+3

'但是如何分化他們之間做哪一個屬於哪個文件在運行time.' ..這是編譯器的功能和鏈接器。從你發佈的第二個鏈接閱讀[這個答案](http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-c-c/109120#109120),談論範圍。 – txtechhelp

+0

很好..令人信服的... – sas

回答

2

沒有必要在運行時的名稱。該名稱僅適用於您和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           .... 
+0

非常感謝你.. – sas