不同翻译单位的记忆表示

时间:2015-04-09 23:21:57

标签: c

不同的翻译单位如何在内存中表示?

例如

//InternalLinkage.h
static int var = 10;

//File A.h
void UpdateStaticA();

//File A.cpp
#include "InternalLinkage.h"
void UpdateStaticA()
{
  var = 20;
}

//File B.h
void UpdateStaticB();

//File B.cpp
#include "InternalLinkage.h"
void UpdateStaticB()
{
    var = 30;
}

//main.cpp
#include "InternalLinkage.h"
#include "ClassA.h"
#include "ClassB.h"
int _tmain(int argc, _TCHAR* argv[])
{
    UpdateStaticA();
    UpdateStaticB();
    printf("var = %d",var);
}

这里的输出是10,因为我们知道我们有三个翻译单元,每个单元都有自己的静态变量var副本。所以现在的问题是

  1. 这些翻译单元如何在内存中保存?
  2. 我们是否为内存中的每个翻译单元分隔了部分,以便编译器可以为每个翻译单元维护静态变量'Var'?
  3. 显然,内存中有三个不同的变量'var'副本,那么编译器如何维护哪个副本属于哪个翻译单元?

0 个答案:

没有答案