在Windows系统中,有三个编译器内置函数用于实现内存栅栏:
然而,我发现了一个奇怪的问题:_ReadBarrier似乎是一个什么都不做的虚函数!以下是VC++ 2012生成的我的汇编代码。
我的问题是:如何在汇编指令中实现内存屏障函数?
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