我检查了 Windows 中使用静态变量的基本单例实现的程序集输出,以使用来自静态函数的新类实例进行初始化。
令我惊讶的是,虽然该类具有进程范围的范围,但内部实现使用对 TLS 的访问。
myClass::getInstance()
{
static v = new myClass();
return v;
}
和汇编输出(第一个相关行):
push rdi
sub rsp, 40h
mov rdi, rsp
mov ecx, 10h
mov eax, 0CCCCCCCCh
rep stosd
mov [rsp+48h+var_18], 0FFFFFFFFFFFFFFFEh
mov eax, 4
mov eax, eax
mov ecx, cs:_tls_index
mov rdx, gs:58h
mov rcx, [rdx+rcx*8]
也许任何人都可以提供一些关于为什么需要这样做的见解(也许是性能)?
谢谢