相关疑难解决方法(0)

-D_GLIBCXX_USE_CXX11_ABI = 1对CentOS 7上的devtoolset-7无效

最近,我注意到我的程序具有很大的性能下降,因为版本低于5的gcc的标准库实现产生list::size()O(n)

我正在使用CentOS 7.2,其默认gcc版本为4.8.5。因此,我安装了scl和devtoolset-7,并重建了程序。但是,我发现list::size()程序中仍然是一个O(n)方法,即使我显式设置_GLIBCXX_USE_CXX11_ABI为1。

为什么?这很奇怪。

c++ gcc redhat-dts

6
推荐指数
1
解决办法
786
查看次数

为什么在这个被破坏的std :: string dtor中有锁定的xadd指令?

我有一个非常简单的代码:

#include <string>
#include <iostream>

int main() {
    std::string s("abc");
    std::cout << s;
}
Run Code Online (Sandbox Code Playgroud)

然后,我编译了它:

g++ -Wall test_string.cpp -o test_string -std=c++17 -O3 -g3 -ggdb3
Run Code Online (Sandbox Code Playgroud)

然后将其反编译,最有趣的部分是:

00000000004009a0 <_ZNSs4_Rep10_M_disposeERKSaIcE.isra.10>:
  4009a0:       48 81 ff a0 11 60 00    cmp    rdi,0x6011a0
  4009a7:       75 01                   jne    4009aa <_ZNSs4_Rep10_M_disposeERKSaIcE.isra.10+0xa>
  4009a9:       c3                      ret    
  4009aa:       b8 00 00 00 00          mov    eax,0x0
  4009af:       48 85 c0                test   rax,rax
  4009b2:       74 11                   je     4009c5 <_ZNSs4_Rep10_M_disposeERKSaIcE.isra.10+0x25>
  4009b4:       83 c8 ff                or     eax,0xffffffff
  4009b7:       f0 0f c1 47 10          lock xadd …
Run Code Online (Sandbox Code Playgroud)

c++ assembly gcc x86-64 atomic

1
推荐指数
1
解决办法
100
查看次数

标签 统计

c++ ×2

gcc ×2

assembly ×1

atomic ×1

redhat-dts ×1

x86-64 ×1