gpt4 book ai didi

c++ - 具有 "aggressive"可变语义的 C 和 C++ 编译器

转载 作者:可可西里 更新时间:2023-11-01 15:27:08 27 4
gpt4 key购买 nike

是否有任何 C 或 C++ 编译器可以为 volatile 变量实现“积极的”内存一致性模型?我所说的“激进”一致性模型是指在生成的代码中伴随着对 volatile 变量的所有写入和内存屏障。

据我所知,这是 IA64 (Itanium) 平台上 C 或 C++ 编译器的习惯行为。 x86 呢?是否有编译器可以实现(或可以配置为实现)类似 Itanium 的方法来处理 x86 平台上的 volatile 变量?

编辑:我正在查看 VS 2005 生成的代码(阅读评论后),在访问 volatile< 时我没有看到任何类似于任何类型的内存屏障的内容 变量。由于 MESIF(英特尔)和 MOESI(AMD)缓存协议(protocol),这非常适合确保单 CPU 多核 x86 平台上的内存一致性。

但是,这在多 CPU SMP x86 平台上似乎还不够。 SMP 平台需要在生成的代码中设置内存屏障,以确保 CPU 之间的内存一致性。我错过了什么?当 Microsoft 声称他们已经在 volatile 变量上具有获取-释放语义时,他们到底是什么意思?

最佳答案

应该注意的是,x86 CPU 既不会对加载与其他加载进行重新排序,也不会对存储与其他存储进行重新排序。因此,不需要明确的障碍。

MSVC 编译器将确保加载不会用 volatile 加载重新排序,存储不会用 volatile 存储重新排序(当然,我现在说的是重新排序加载和存储指令),从而保证获取和释放 volatile 加载的语义和商店分别。

关于c++ - 具有 "aggressive"可变语义的 C 和 C++ 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11233709/

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