performance - 我可以在 x86/x86_64 上自动递增 16 位计数器吗?

标签 performance assembly x86 atomic x86-64

我想通过将现有的 32 位计数器转换为 16 位计数器来节省内存。该计数器以原子方式递增/递减。如果我这样做:

  1. 在 x86/x86_64 上对atomic_inc(uint16_t x) 使用什么指令?
  2. 这在多处理器 x86/x86_64 机器上可靠吗?
  3. 这样做是否会对这些架构造成性能损失?
  4. 如果 (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/

相关文章:

php - JOIN 查询在真实数据库上太慢,在小型数据库上运行良好

windows - 跨 Linux、Windows 运行程序集

plugins - 如何为 ollydbg 2.x.x 设置插件?

x86 - AVX2 矢量化 256 位查找表(32 个无符号字符)

c++ - 在 C++ 中获取文本 CSV 文件中的字符串

r - 在 R 中使用特征哈希/哈希技巧进行机器学习

java - 我将如何加快这个程序?

c++ - 为什么C++使用32位寄存器来存储8位值

c++ - 计算 trampoline hook 的 JMP 指令地址

math - Bullet Physics 四元数 sse 实现疑惑