gpt4 book ai didi

c++ - 当我编译指令 __atomic_add_fetch 时到底发生了什么

转载 作者:行者123 更新时间:2023-12-01 15:06:49 25 4
gpt4 key购买 nike

我的代码中有一条指令调用函数 __atomic_add_fetch。当我编译这段代码时,出现如下编译错误

error: undefined reference to '__atomic_fetch_add_8'

我真的不明白为什么当我调用 __atomic_add_fetch 时它会抛出对 __atomic_fetch_add_8 的 undefined reference 。有人可以帮我了解编译这段代码时到底发生了什么吗?

注意:我特别希望了解“将 __atomic_add_fetch 转换为 __atomic_fetch_add_8 的内部发生的事情”。不是修复编译问题的解决方案。

最佳答案

您应该使用标准化的atomic_fetch_add

在任何情况下,看起来你的 __atomic_fetch_add 具有给定的参数类型(大概是一个 8 字节整数)无法在你的平台上解析为汇编指令,所以它正在被解析到您需要链接 libatomic (-latomic) 的函数调用。

编辑细节:

在 gcc 上,__atomic_fetch_add 似乎是用于实现 stdatomic.hatomic_fetch_and_explicit 的内置编译器(这只是一个简单的它的宏名称)。正如我所指出的,您实际上应该使用标准名称 atomic_fetch_add_explicit,而不是 __atomic_fetch_add 那样的不可移植的实现细节。

无论如何,问题似乎是 gcc 和 clang 没有在 ARM 上使用指令实现 atomic_fetch_and_explicit(与 ARM64 或 x86-64 不同),而是它们生成对(全局- lock-using) 来自 libatomic 库的函数。该函数的名称似乎是从您尝试 fetch_add 的整数中的字节数派生的(__atomic_fetch_add_8 如果您要 fetch_adding 到 _Atomic uin64_t__atomic_fetch_add_4 如果你正在 fetch_adding 到 _Atomic uin32_t 等)。

https://gcc.godbolt.org/z/S67g7b

关于c++ - 当我编译指令 __atomic_add_fetch 时到底发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56169077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com