为什么与C相比,linker在C++中的任务更艰巨

why does linker have a tougher task in C++ compared to C?

本文关键字:任务 C++ 相比 linker 为什么      更新时间:2023-10-16

面试官问了我这个问题,不确定我的回答是否足够好。 有人有什么想法吗?

我脑海中浮现的第一个念头是名字的抨击。在 C++ 中,而不是在 C 中,可以有两个名称相同但参数不同的方法。编译器必须区分这两种方法,从而在内部更改(修改)名称。

C++编译器必须在 C 中执行此操作的另一件事是处理类继承。您有抽象类、重写的方法和虚拟方法。这需要更多的处理来整理。

我不能说我非常理解这一点,但伊恩·兰斯·泰勒的这篇博客文章似乎有一个答案。 从那里引用:

使用C++时存在一些特殊的挑战。向类添加新的虚拟方法可以是使用该类的任何函数的 ABI 更改。在这种情况下提供类的向后兼容版本是非常尴尬的 - 没有自然的方法指定用于虚拟表的名称和版本或旧版本的 RTTI 信息。

当然,您绝不能删除任何符号。

阅读该条目以获取更多上下文。 (ABI = 应用程序二进制接口)