我想知道编译器内部会发生什么...... 比如它是否将全局变量存储在不同的位置。
答案 0 :(得分:3)
符号表上的维基百科页面可以为您提供基本的理解。
http://en.wikipedia.org/wiki/Symbol_table
在计算机科学中,符号表是a使用的数据结构 语言翻译,如编译器或解释器,每个 程序源代码中的标识符与信息相关联 与其在声明中的声明或出现有关,等 类型,范围级别,有时还有其位置。
[...]
常见的实现技术是使用哈希表 实现。 编译器可以为所有人使用一个大符号表 符号或使用不同的分离的分层符号表 作用域。强>
强调我的。
答案 1 :(得分:0)
根据你的声明方式,它知道变量是全局变量还是本地变量。
//declared at namespace scope - global
extern int x;
int main()
{
//declared inside a method - local
int y;
};
答案 2 :(得分:0)
通常有4个范围的任何变量。
使用extern
关键字显式地表示变量extern。(默认情况下,全局变量为extern
)
使用static
将变量或函数范围限制为当前文件
根据这一点,内存分配在不同的段
global: visible in more than one source file
-- data segement(also differs whether initialised or uninitialized)
local : visible with in { } it also called function(){} scope
-- on stack
block : {} inside any function another scope of block valiables with in {}
-- on stack if with in function
file : making static variable is limited to it's file scope or
current translation unit. -- again data section