有时不需要“latomic”标志?

k h*_*ang -1 c++ gcc atomic stdatomic

我知道GCC 链接库-latomic需要该标志。atomic但是,由于某种原因std::atomic<int>不需要它来构建

不使用 latomic 构建

而结构体则

构建需要原子

这种差异是由什么造成的呢?

Pet*_*des 5

如果编译器内联使用的__atomic内置函数std::atomic,则目标文件将不包含对libatomic定义的函数的任何引用。

对于大多数具有atomic<size_t>或更小的体系结构(至少启用了优化)来说,这是正常的,有时对于某些体系结构上的两个指针大小的结构来说,这是正常的。(但自 GCC7 以来不是 x86-64,lock cmpxchg16b即使您使用 进行编译,它也选择不内联-mcx16,并且选择不将其报告为is_lock_freehttps://gcc.gnu.org/ml/gcc-patches/2017-01/msg02344 .html )

在您的情况下,正如您通过将鼠标悬停在源代码上并查看 asm 所看到的那样, 它甚至在您的调试构建中auto newData = atomicData.load();进行了编译。mov DWORD PTR [rbp-4], eax(自从您禁用优化以来,出现了大量混乱。)