不同的翻译单位如何在内存中表示?
例如
//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副本。所以现在的问题是
显然,内存中有三个不同的变量'var'副本,那么编译器如何维护哪个副本属于哪个翻译单元?