【问题标题】:Static, global and multiple translation units静态、全局和多个翻译单元
【发布时间】:2013-03-06 22:11:37
【问题描述】:

这包括三个相互关联的问题:

1) 您最终如何获得多个翻译单元?当然,所有源文件和头文件都会“加入”在一起,否则您最终会得到不属于该“程序”一部分的代码调用代码。翻译单元和程序不一样吗?

2) 静态对象/类如何处理多个翻译单元?如果不同翻译单元中的多个源文件包含一个会创建一个对象(具有静态数据成员)的标题,每个翻译单元是否会有一个单独的静态数据成员?

3) 与问题 2 类似,全局变量是否在多个翻译单元之间共享(有点像我暗示它们是单独的程序 - 只是一起编译???)还是全局变量仍然起作用....全局变量翻译单位?

【问题讨论】:

标签: c++ compiler-construction static global


【解决方案1】:

1) 每个源文件,连同它包含的头文件,被称为一个翻译单元。它被编译成一个目标文件。然后链接器最终将所有目标文件连接到最终的可执行文件中。 (简化,但给你一个基本的想法)

2) 链接器将消除副本。

3) 是的,见 2)

【讨论】:

    【解决方案2】:
    1. 不,它们每个都被编译成一个目标文件,这些文件随后被链接在一起。

    2. 如果对象已声明但未在标头中定义,这是更好的做法,那么将只定义一个对象(假设它实际上只定义在一个源文件中)并且每个包含标题的人都会有一种编程方式。

      static 源文件中的对象,否则将在什么 似乎是全局范围,除此之外将无法访问 翻译单元。在任何类或函数之外,static 限制 范围到翻译单元。

    3. 非静态范围的对象,是的。

    【讨论】:

    • 关于数字1,如果答案是“否”,那么在混合内联代码和静态代码时需要考虑“翻译单元”的目的是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多