如果编译器内联使用的__atomic内置函数std::atomic,则目标文件将不包含对libatomic定义的函数的任何引用。
对于大多数具有atomic<size_t>或更小的体系结构(至少启用了优化)来说,这是正常的,有时对于某些体系结构上的两个指针大小的结构来说,这是正常的。(但自 GCC7 以来不是 x86-64,lock cmpxchg16b即使您使用 进行编译,它也选择不内联-mcx16,并且选择不将其报告为is_lock_free。 https://gcc.gnu.org/ml/gcc-patches/2017-01/msg02344 .html )
在您的情况下,正如您通过将鼠标悬停在源代码上并查看 asm 所看到的那样, 它甚至在您的调试构建中auto newData = atomicData.load();进行了编译。mov DWORD PTR [rbp-4], eax(自从您禁用优化以来,出现了大量混乱。)