我阅读了FastMM4的源代码,注意到这个有趣的函数
function GetThreadID: Cardinal;
{$ifdef 32Bit}
asm
mov eax, FS:[$24]
end;
{$else}
begin
Result := GetCurrentThreadID;
end;
{$endif}
我已经测试过了,它可以工作,所以我的问题是任何解释为什么它可以工作?
x86寄存器FS指向Windows中的线程信息块。地址FS+0x24的TIB中的值包含当前线程的ID。通过将值移动到eax(用于传递函数返回值),GetThreadID返回当前线程ID。
此方法使用存储在线程环境块中的信息