我看到了很多关于C++没有像C那样的标准ABI的讨论。我很好奇,究竟有什么问题?目前,我想到的包括:
- 名称重整(Name mangling)
- 异常处理(Exception handling)
- RTTI
除了这些与C++相关的ABI问题外,还有其他问题吗?
我看到了很多关于C++没有像C那样的标准ABI的讨论。我很好奇,究竟有什么问题?目前,我想到的包括:
除了这些与C++相关的ABI问题外,还有其他问题吗?
脑海中浮现的:
C++ 特定内容:
通用内容:
在我的经验中,最大的问题是C++标准库。即使有ABI规定了类应该如何布局,不同的编译器也提供了不同的std::string
和std::vector
等标准对象实现。
我并不是说无法对C++库对象的内部布局进行标准化,只是以前还没有这样做过。
std::vector
的不兼容布局。 - quant_devGCC文档解释了对该ABI的C++支持:本文档编写为通用规范,可供各种架构上的C++实现使用。但是,它确实包含了针对Itanium 64位ABI的处理器特定材料,被标识为这样的。
正如@Lindydancer所指出的,您还需要使用相同的C++标准库或运行时。从GCC 3.2开始,GCC用于C++的二进制约定基于一种书面的、供应商中立的C++ ABI,该ABI旨在针对64位Itanium进行特定设计,但也包括适用于任何平台的通用规范。其他编译器供应商在一些平台上也实现了这个C++ ABI,尤其是GNU/Linux和BSD系统。
wchar_t
有点令人烦恼,但我不确定如何对其进行分类 :-) - Šimon Tóthfopen
期望UTF-8字符串?这真是太棒了。这是链接:https://dev59.com/dlvUa4cB1Zd3GeqPuH0A 顺便说一下,我使用MSVC、Intel和GCC,因为我教授C和C++,所以需要知道这些主要编译器的功能如何。 - Šimon Tóth