gpt4 book ai didi

c++ - 使用模板的 C++ 部分编译如何工作?

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:09 24 4
gpt4 key购买 nike

<分区>

C , 部分编译是可能的,因为整个 *.c文件可以编译成机器代码,解析和重定位留给链接器处理。这只是计算某些指令在最终可执行文件中的位移或了解某些全局变量的绝对地址的问题。

C++看起来几乎可以做到同样的事情——C++ 之间存在相当简单的映射。代码和等价物 C代码(就编程语言之间的映射而言)。然而,模板似乎使事情复杂化。

例如,如果我使用 std::vector<int>1.c ,那么,由于模板类是由 <vector> 指定的 header ,编译器可以为 int 生成机器代码规范。假设在同一个项目中有一个文件 2.c这也依赖于 std::vector<int>特化,那1.o2.o必须链接。是1.c的部分编译和 2.c给自己*.o以后可以链接文件吗?

正如下面评论中的链接问题中提到的,这个问题有两种常用的方法:都生成std::vector<int>。代码,或者链接器经历另一轮“依赖编译”,其中单个 vector<int>被编译然后链接到这两个文件。

关于“贪婪编译”——这是否意味着在每个编译单元中对模板类方法的每次使用都必须放入链接器重定位表中?此外,某些调用可能不使用长跳转(即,模板类定义在使用它的方法的正上方)。但是,如果链接器要强制编译单元使用它选择的专用化,则需要长跳转 - 但指令大小太大而无法修补。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com