我想通过将现有的 32 位计数器转换为 16 位计数器来节省内存。该计数器以原子方式递增/递减。如果我这样做:
- 在 x86/x86_64 上对atomic_inc(uint16_t x) 使用什么指令?
- 这在多处理器 x86/x86_64 机器上可靠吗?
- 这样做是否会对这些架构造成性能损失?
- 如果 (3) 为"is",那么预期的性能损失是多少?
感谢您的评论!
最佳答案
这里使用 GCC 程序集扩展,作为 Steve 的 Delphi 答案的替代方案:
uint16_t atomic_inc(uint16_t volatile* ptr)
{
uint16_t value(1);
__asm__("lock xadd %w0, %w1" : "+r" (value) : "m" (*ptr));
return ++value;
}
将 1 更改为 -1,并将 ++
更改为 --
,以实现递减。
关于performance - 我可以在 x86/x86_64 上自动递增 16 位计数器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542006/