gpt4 book ai didi

c++ - 内存屏障是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:33 28 4
gpt4 key购买 nike

在Windows下,有3个编译器内部函数来实现内存屏障:

1. _ReadBarrier;

2. _WriteBarrier;

3. _ReadWriteBarrier;

然而,我发现了一个奇怪的问题:_ReadBarrier 似乎是一个什么都不做的虚拟函数!以下是我用VC++ 2012生成的汇编代码。

我的问题是:如何在汇编指令中实现内存屏障功能?

int main()
{
013EEE10 push ebp
013EEE11 mov ebp,esp
013EEE13 sub esp,0CCh
013EEE19 push ebx
013EEE1A push esi
013EEE1B push edi
013EEE1C lea edi,[ebp-0CCh]
013EEE22 mov ecx,33h
013EEE27 mov eax,0CCCCCCCCh
013EEE2C rep stos dword ptr es:[edi]
int n = 0;
013EEE2E mov dword ptr [n],0
n = n + 1;
013EEE35 mov eax,dword ptr [n]
013EEE38 add eax,1
013EEE3B mov dword ptr [n],eax
_ReadBarrier();
n = n + 1;
013EEE3E mov eax,dword ptr [n]
013EEE41 add eax,1
013EEE44 mov dword ptr [n],eax
}
013EEE56 xor eax,eax
013EEE58 pop edi
013EEE59 pop esi
013EEE5A pop ebx
013EEE5B add esp,0CCh
013EEE61 cmp ebp,esp
013EEE63 call __RTC_CheckEsp (013EC3B0h)
013EEE68 mov esp,ebp
013EEE6A pop ebp
013EEE6B ret

最佳答案

_ReadBarrier , _WriteBarrier , 和 _ReadWriteBarrierintrinsics that affect how the compiler can reorder code ;它们与 CPU 内存屏障完全无关,仅对特定类型的内存有效(请参阅“受影响的内存”here)。

MemoryBarrier() 是用于强制 CPU 内存屏障的内在函数。但是,Microsoft 的建议是使用 std::atomic<T>继续使用 VC++。

关于c++ - 内存屏障是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572092/

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