当我使用thread_local,_Thread_local,__ thread或__declspec(thread)时,编译器似乎在创建线程时分配线程本地存储,并将地址存储在x86派生系统中的fs或gs寄存器中.
在这种情况下,有什么类似’线程本地存储溢出’?
最佳答案 有限制.每个系统都会有所不同,但在
Windows上,有一个有限的数据部分,它是专门映射的线程.此部分的大小有限.
旧版本的Windows直接使用它,并且在创建新项目时会失败.
上次我检查Windows 7时,这已经消失了(操作系统使用1个插槽作为整个DLL – 作为重定向到线程本地映射),但是有一个不同的限制,它限制了可用的唯一插槽的数量.每个加载的DLL使用一个插槽,因此可以使用线程本地存储的DLL数量有限制.