![]() |
1
3
你删除了Hadi的密码
看看编译器生成的asm,例如。 on the Godbolt compiler explorer . 当你试图将这种低级的东西微型化时,你应该一直这样做,特别是当你的计时结果出乎意料的时候。
您将从中获取有关未使用变量的编译器警告
在GNU C中(至少在gcc和clang中
这个
这看起来像是严格的UB别名,但我的理解是gcc定义了这种行为。Linux内核投射一个指针来添加
那你就不必再纠结于
注意,这可能会导致asm加载到寄存器中,但从不读取它。当前CPU仍在等待结果(特别是如果
对于硬件来说,这是很棘手/不太可能的,因为CPU必须做好异常准备,请参阅 discussion in comments here What is the latency and throughput of the RDRAND instruction on Ivy Bridge? ),但那可能是个特例。
我自己在Skylake上测试了这个
,除非你 希望 以空闲时钟速度测量缓存未命中执行时间。看起来您的空计时区域占用了大量的参考周期,所以您的CPU可能被打卡得很慢。
作为熔毁或幽灵攻击的一部分,缓存读取端通道通常使用足够大的步幅,以至于硬件预取无法检测访问模式。e、 在单独的页面而不是相邻的行上。最早的谷歌点击之一
|
![]() |
Bogey · C#共享内存-CPU缓存风险(非易失性读取)? 7 年前 |
![]() |
filo · 如何在x86上使用gcc强制执行内存排序 7 年前 |
![]() |
maxim1 · Java中的易失阵列、内存障碍和可见性 9 年前 |
![]() |
paddy · 双原子自旋锁的最小限制存储器排序 9 年前 |