从手册:
在GCC 5.1版本中,libstdc ++引入了一个新的库ABI,其中包括std :: string和std :: list的新实现.这些更改对于符合2011 C++标准是必要的,该标准禁止写入时写入字符串并要求列表跟踪其大小.
可以使用_GLIBCXX_USE_CXX11_ABI宏来控制库标头使用旧的或新的ABI,而不管使用哪个"-std".
我想知道使用这种"兼容性ABI"的含义是什么?我猜小串操作的运行时性能会受到影响(我假设是负面的),并且列表大小访问从O(1)(C11 ABI)到O(N)(兼容性ABI).
您的第一个问题实际上已由手册本身回答:
...要使用的 ABI 选择独立于用于编译代码的 -std 选项...这可确保 -std 不会更改 ABI,以便可以直接链接 C++03 和 C+ +11 代码在一起。
关于第二个问题,恐怕很难概括其影响,因为这取决于您的代码如何使用标准库。它会复制很多字符串吗?查询列表大小的频率是多少?代码是多线程的吗?
尽管 C++11 标准中引入了原子性和并发性,但我猜想 stdlib++ 写时复制机制无论如何已经使用了它的变体。这些实现通常是线程安全的。
也许您没有直接提到的一件事是对依赖于这些行为的其他标准组件的影响,例如list::splice
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |