彻底搞懂 C++ ABI 的底层机制
Thoroughly Understanding C++ ABI

Application Binary Interface(ABI)这个概念看似熟悉,真要精准描述却很难。文章深入剖析了 CPU 指令集、操作系统层面的 Object File Format、Data Representation 以及 Function Calling Convention 如何共同决定二进制兼容性。通过对比 Windows x64 ABI 和 x86-64 System V ABI 在参数传递上的差异,揭示了为何小于 16 字节的 struct 传值可能比传引用更高效,以及 unique_ptr 与 raw_ptr 在特定场景下的性能真相。这些细节对于理解 C++ 底层机制和避免 ODR 违规至关重要。
函数参数传递方式仅与调用约定有关,而与代码优化级别无关。
HN 评论区
15- Dwedit
C++ ABI 的混乱局面正是 Win32 最终采用 COM 等机制来处理跨模块对象传递的原因。由于无人能就标准达成一致,COM 标准强制规定了一套非常具体的调用约定,以及 COM 对象非常具体的 vtable 布局。
- rramadass
GNU libstdc++ 的“双 ABI”问题 - https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_a...
- rramadass
一如既往,先读维基百科,按需点击链接 - https://en.wikipedia.org/wiki/Application_binary_interface