gpt4 book ai didi

visual-studio-2010 - _InterlockedIncrement 内部实现

转载 作者:行者123 更新时间:2023-12-02 22:36:25 27 4
gpt4 key购买 nike

当使用 _InterlockedIncrement 时,Visual Studio 生成以下机器代码:

; 40   :        _InterlockedIncrement(&framecounter);

00078 b8 00 00 00 00 mov eax, OFFSET ?framecounter@@3JA ; framecounter
0007d b9 01 00 00 00 mov ecx, 1
00082 f0 0f c1 08 lock xadd DWORD PTR [eax], ecx

如果我要写这篇文章,我会使用 lock inc DWORD PTR [eax] 而不是 movxadd

Microsoft 首选 xadd 并使用 2 条指令而不是 1 条指令是否有正当理由?

最佳答案

因为 _InterlockedIncrement 也返回新值。

你不能用 lock inc DWORD PTR [eax] 来做到这一点,因为现在旧值和新值都找不到了。除了在内存中,但如果你进行其他读取,显然它不会是原子的(增量本身是原子的,但你可以获得一个与增量时发生的事情无关的值)。

返回值使 _InterlockedIncrement 更有用。

关于visual-studio-2010 - _InterlockedIncrement 内部实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391392/

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