2016-07-25 6 views
1

Sagen wir, ich habe zwei statische Variablen (mit gleichem Namen) in zwei verschiedenen Dateien definiert, diese werden im Abschnitt bss gespeichert.Wie wird zwischen zwei nicht initialisierten statischen Variablen unterschieden?

//File1.c 
static int st; 

//File2.c 
static int st; 

Aber wie wird zur Laufzeit zwischen ihnen unterschieden, was zu welcher Datei gehört?

fand ich einige Themen hier aber nicht meine Frage zu beantworten -

  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

'Aber wie Differenzierung zwischen ihnen gemacht wird, was eine Datei zum Laufe time.' angehört .. das ist die Funktion des Compilers und Linker. Lesen Sie [diese Antwort] (http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-c-c/109120#109120) aus dem 2. Link, den Sie gepostet haben, über den Umfang. – txtechhelp

+0

Groß .. überzeugend ... – sas

Antwort

2

Es für einen Namen keine Notwendigkeit zur Laufzeit ist. Der Name ist nur für Sie und den C-Compiler notwendig. Der C-Compiler weiß, zu welcher Datei er gehört, zu der Datei, in der er definiert ist. Das sind genug Informationen.

Beide Variablen werden im Abschnitt .bss mit ihrem jeweiligen Namen gespeichert, jedoch an verschiedenen Speicherorten. So wird ihre Unterscheidung gemacht.

Sie können sie bestätigen, wie sie durch die Verwendung objdump gespeichert sind:

$ 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

Vielen Dank .. – sas