我正在阅读有关内存屏障的内容,我可以总结的是它们阻止了编译器完成的指令重新排序。
所以在用户空间内存中可以说我有
b = 0;
main(){
a = 10;
b = 20;
c = add(a,b);
}
编译器是否可以重新排序此代码,以便在调用b = 20
之后进行分配。c = add()
为什么我们在这种情况下不使用障碍?我在这里缺少一些基本知识吗?
虚拟内存是否免于任何重新排序?
进一步扩展问题:
在网络驱动程序中:
1742 /*
1743 * Writing to TxStatus triggers a DMA transfer of the data
1744 * copied to tp->tx_buf[entry] above. Use a memory barrier
1745 * to make sure that the device sees the updated data.
1746 */
1747 wmb();
1748 RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
1749 tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
1750
当他说设备看到更新的数据时......如何将其与使用障碍的多线程理论联系起来。