为什么与C相比,linker在C++中的任务更艰巨
why does linker have a tougher task in C++ compared to C?
面试官问了我这个问题,不确定我的回答是否足够好。 有人有什么想法吗?
我脑海中浮现的第一个念头是名字的抨击。在 C++ 中,而不是在 C 中,可以有两个名称相同但参数不同的方法。编译器必须区分这两种方法,从而在内部更改(修改)名称。
C++编译器必须在 C 中执行此操作的另一件事是处理类继承。您有抽象类、重写的方法和虚拟方法。这需要更多的处理来整理。
我不能说我非常理解这一点,但伊恩·兰斯·泰勒的这篇博客文章似乎有一个答案。 从那里引用:
使用C++时存在一些特殊的挑战。向类添加新的虚拟方法可以是使用该类的任何函数的 ABI 更改。在这种情况下提供类的向后兼容版本是非常尴尬的 - 没有自然的方法指定用于虚拟表的名称和版本或旧版本的 RTTI 信息。
当然,您绝不能删除任何符号。
阅读该条目以获取更多上下文。 (ABI = 应用程序二进制接口)
相关文章:
- 有没有任务栏API可以立即应用注册表更改
- 如何创建线程序列以按照启动顺序执行任务?
- C++一个线程如何正确通信其任务已完成?
- 在线程之间拆分任务总是值得的吗?
- 递归求和任务的错误答案
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- C++ 任务流库入门
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 编写一个读取五个整数并执行一些任务的C++程序
- 任务内部的 OpenMP 任务循环
- 不知道如何在家庭作业任务中实现一件事
- 如何安全地停止 IOCP WSARecv() 任务,并释放 WSAOVERLAPED 结构?
- 为什么我的 FreeRTOS 任务看不到类成员?
- 当前步骤:构建任务.json 文件
- 命令模式 - 使用"weight"执行任务的命令
- 无法删除EXE崩溃后,即使进程未显示在任务管理器中
- 需要帮助来理解我的任务的 QRegularExpression
- xSemaphoreTake 在调用 xSemaphoreGive 后不会恢复任务
- 如果互斥锁被锁定,则安全地跳过任务