我希望通过将现有的32位计数器转换为16位计数器来节省内存。该计数器以原子方式递增/递减。如果我这样做:
感谢您的评论!
答案 0 :(得分:4)
这是一个使用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,将++
更改为--
以减少。
答案 1 :(得分:3)
这是一个有效的Delphi函数:
function LockedInc( var Target :WORD ) :WORD;
asm
mov ecx, eax
mov ax, 1
Lock xadd [ecx], ax
Inc eax
end;
我想你可以把它转换成你需要的任何语言。
答案 2 :(得分:0)
执行原子增加的最简单方法如下(这是内联ASM):
asm
lock inc dword ptr Counter;
end;
其中J是整数。这将直接增加Counter在其内存位置。
我用暴力测试了它,它100%工作。
答案 3 :(得分:-1)
回答其他三个问题: