是什么变化导致C++中ABI中断
What changes causes an ABI breaking in C++?
当C++标准化委员会调查STL的修改时,会非常注意不要引入破坏ABI的更改。
是什么导致了ABI破坏,什么没有在C++中引入ABI破坏?((链接到受欢迎的课程或文件)
虽然没有常见的ABI,但标准委员会确实听取了供应商对一些供应商报告的ABI损坏的担忧。这些担忧是否会阻止做出改变,取决于正在改变的内容。
对于标准库,导致潜在ABI破坏的主要问题是那些更改类或类模板的布局或更改通常内联函数的行为的问题。大多数情况下,这些问题可以通过稍微不同的配方或稍微改变功能来解决。
对于C++11,我记得与ABI相关的讨论,关于std::list<...>::size()
被设为恒定时间,而std::basic_string<...>
的COW实现被禁止。对于列表问题,问题不在于此,因为大多数实现已经使用了恒定的时间大小,而少数没有使用的实现则无法提供足够有力的理由。对于std::basic_string<...>
,COW实现的ABI被破坏了,因为不为不同的字符串对象提供数据竞争保证的缺点是不可接受的。
对于提出的一些建议,例如,为std::exception
强制执行堆栈跟踪的想法,这将打破每个人的异常ABI,ABI的破坏几乎是一个致命的论点。尽管有时会引入强制破坏ABI的更改,但这种情况必须比不影响任何事情的更改更有力:除非更改的好处超过了报告的破坏某些供应商ABI的可能性,否则不会这样做。在一些有争议的情况下,实现者会回去调查是否有机会实现一个潜在的低效率版本以实现向后兼容性。
ABI的问题是,如果不能将旧库与新编译器一起使用,肯定会有公司大声抱怨。在某些情况下,供应商提供交换机来支持它们,但例如,std::string
被烘焙到太多的库中,以至于它只会被更改。
- 类成员和中断
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 海湾合作委员会手册中提到的"C++ ABI Specification"是什么?
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- 我的代码运行良好,但在游戏循环中中断
- 使用带有MCP23017的 pigpio 进行中断读取
- 为什么我在 AVR 中的中断无法正常工作?
- 使用 UDP 中断 while()-循环
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何在 CompleteAsyncIO 中访问 IOMemoryBufferDescriptor,该描述符通过中断 EP
- 如何为伺服电机创建中断或返回值?
- 开关:无外壳中断
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 如何使用中断停止循环?
- 在AAPCS(ARM ABI)下,C/C++结构填充的稳定性如何
- 对于哪些 ABI,我可以使用 NDK v10e 构建 apk?
- 为什么当我输入一个被接受的数字时,我的 do-while 循环没有中断?
- 从函数返回类型中删除常量是否会中断 ABI
- ABI 稳定性:何时中断 ABI
- 是什么变化导致C++中ABI中断