繁体   English   中英

在哪些情况下 __sync_synchronize 会收到任何 arguments?

[英]In which cases does __sync_synchronize receive any arguments?

GCC 文档关于 __sync 内置函数将__sync_synchronize列为:

__sync_synchronize (...)

这个内置的 function 发出一个完整的 memory 屏障。

这意味着表示可变参数 function(采用任意数量的参数),但没有强制的第一个参数,这在 C 标准中甚至在语法上都是不允许的; 无论如何,假设它可以逃跑,因为它是一个内置的编译器,我想知道:这个function 是否会收到 arguments

上面的 GCC 文档解释了为什么...存在:

英特尔文档中描述了所有例程,以采用“受 memory 屏障保护的变量的可选列表”。 目前尚不清楚这是什么意思。 这可能意味着只有列出的变量受到保护,或者可能意味着要保护的其他变量的列表。 该列表被 GCC 忽略,将其视为空。 GCC 将空列表解释为应保护所有全局可访问变量。

对于完整的 memory 屏障,在里面什么都不写是有意义的。

我试着用谷歌搜索它(例如这个网站包含 30 个使用示例),查看包含内置函数的 Stack Overflow 问题,并使用 Github 的代码搜索,我找不到传递给它的__sync_synchronize的单个调用。

因此,如果我想在工具中支持内置函数,似乎我可以简单地将其视为声明为__sync_synchronize(void) ,并且它总是可以工作的。

是否存在一个合法的案例,可以将参数传递给该内置函数?

你在某种程度上已经自我回答了。 我认为您缺少的信息是内置函数不是真正的函数,它们的 arguments 可能不会在任何地方传递,甚至不会被评估。 编译器在使用时会生成一些代码,但内置的可能不是正确的可调用 function。

这些不是任意的 arguments,它实际上应该是一个变量列表(不是,例如表达式)。 在英特尔编译器中可能有一些神秘的 function,但 gcc 会很乐意忽略。 gcc 可能保留了相同的签名以保持与某些现有代码的兼容性。

内置函数可能会对他们明显的 arguments 做一些奇怪的事情,比如“没有一个参数被评估”。 或“内置 function 不会评估未选择的表达式”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM