gpt4 book ai didi

c - 编译器级别和硬件级别的内存防护

转载 作者:行者123 更新时间:2023-12-04 05:35:52 24 4
gpt4 key购买 nike

我读到了内存围栏 here ...我需要澄清一下

asm volatile ("" : : : "memory")



这提供了编译器级别的内存栅栏,并且处理器在使用它时仍然可以进行重新排序。

无论如何,我可以使用类似的指令同时实现编译器级别的防护和处理器级别的防护吗?

我碰到,

asm volatile("sfence" : : : "memory")



这是做什么的?它是否仅提供编译器级别的存储防护?

对此的任何输入都将非常有帮助。

谢谢

最佳答案

它们执行两个概念相关但功能不同的操作:

asm volatile ("" : : : "memory")

告诉编译器不要在该点周围重新排序内存访问(否则它可以自由地进行优化目的),以便您可以确保写入代码的加载和存储在您到达该点时完成编码。
asm volatile("sfence" : : : "memory")

是一个实际的 intel-family cpu 命令(sfence),它告诉硬件不要重新排序存储(还有 lfence 和 mfence 硬件指令)以进行优化;添加“内存”约束告诉编译器不要重新排序内存访问。

维基百科对这个主题有很好的处理(http://en.wikipedia.org/wiki/Memory_barrier);如果你想更深入一点,你应该查看英特尔程序员手册(http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html/)

关于c - 编译器级别和硬件级别的内存防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11947485/

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