使用_GLIBCXX_CXX11_ABI将5.1版以前的C++ABI与C++11/14功能一起使用有什么意义
What are the Implications of using _GLIBCXX_CXX11_ABI to use pre-5.1 C++ ABI with C++ 11/14 features?
来自手册:
在GCC 5.1版本中,libstdc++引入了一个新的库ABI,其中包括std::string和std::list的新实现。这些更改对于符合2011 C++标准是必要的,该标准禁止写时复制字符串,并要求列表跟踪其大小。
可以使用_GLIBCXX_use_CXX11_ABI宏来控制库头使用旧ABI还是新ABI,与使用的"-std"无关。
我想知道使用这个"兼容性ABI"的含义是什么?我想小字符串操作的运行时性能会受到影响(我认为是负面的),并且列表大小的访问从O(1)(C11 ABI)到O(N)(兼容性ABI)。
- 我的猜测正确吗?有人能详细说明吗
- 我是否遗漏了其他含义?原子和并发特性呢?有影响吗
您的第一个问题实际上是由手册本身回答的:
要使用的ABI的选择与用于编译你的代码。。。这确保了-std不会更改ABI,因此将C++03和C++11代码直接链接在一起。
关于第二个问题,恐怕很难概括其影响,因为这取决于代码如何使用标准库。它经常复制字符串吗?查询列表大小的频率是多少?代码是多线程的吗?
尽管原子和并发是在C++11的标准中引入的,但我猜stdlib++写时复制机制已经使用了它的变体。这些实现通常是线程安全的。
也许有一件事你没有直接提到,那就是对其他依赖于这些行为的std组件的影响,比如list::splice
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- pcap_dump功能在与pcap_loop一起使用时不会被调用,pcap_dispatch始终返回 0
- 如何将BITMAPV5HEADER与CreateDIBitmap功能一起使用
- 将打开的CV的重映射功能与类型CV_8SC1的源图像一起使用
- 如何使此功能与 FILE 一起使用?C++
- 删除功能误差的C 与有条件的iniaization一起使用
- 重新分配指针后,将类功能与指针一起使用
- GCC vs Clang:将功能与-FPIC一起插入
- C 与查找功能一起使用时,迭代器为什么行为会有所不同
- 当与可能导致缓冲区溢出的功能一起使用时,外部变量是否比其他变量更大
- 如何声明 IP 地址以将其与多种功能一起使用
- 如何将QProgressDialog与QDomDocument保存功能一起使用
- 如何将unordered_set与比较功能一起使用
- 如何使枚举类与'bit-or'功能一起使用?
- 使用_GLIBCXX_CXX11_ABI将5.1版以前的C++ABI与C++11/14功能一起使用有什么意义
- 是否可以将STL复制功能与地图一起使用
- 如何将 Doxygen 的 "Documentation at other places" 功能与专门的模板类一起使用?