【发布时间】:2012-01-17 14:15:23
【问题描述】:
编译器内存屏障的作用之一是强制编译器确保缓存在寄存器中的所有堆栈变量在屏障之前写入内存。
例如,GCC有如下语句:
asm inline ("" : : : "memory");
有没有办法告诉编译器(特别是 GCC,但我也对其他编译器感兴趣)只对 特定 变量执行相同的效果?类似于以下想象的构造:
int x;
...
asm inline ("" : : : "memory(x)");
如果 x 和 x 的值恰好缓存在寄存器中,则预期行为只会将其写入相应的内存位置。
原因是我有一个特定的变量,我需要确保它没有缓存在寄存器中,以便硬件引擎可以读取它的值。但是,一个完整的编译器内存屏障将迫使编译器将 all 其他变量的值写入内存,这些变量可能在那个时间点缓存在寄存器中,这可能会产生比我更多的数据需要写。我想知道是否有更具体的内容。
提前致谢!
【问题讨论】:
标签: c gcc compiler-construction