如何在两个未初始化的静态变量之间进行区分

时间:2016-07-25 05:02:29

标签: c memory-management

假设我在两个不同的文件中定义了两个静态变量(具有相同的名称),这些变量将存储在bss部分中。

URL('static', 'images/some_pic.png')

但是如何区分它们在运行时属于哪个文件。

我在这里找到了几个主题,但没有回答我的问题 -

  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++)?

1 个答案:

答案 0 :(得分: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                                         ....