当我使用thread_local
, _Thread_local
, __thread
, or __declspec(thread)
,编译器似乎在线程创建时分配一个线程本地存储并将地址存储在fs
or gs
在 x86 派生系统中注册。
在这种情况下,是否存在“线程本地存储溢出”之类的情况?
有限制。每个系统都会有所不同,但在Windows上,有一个有限的数据部分专门映射线程。此部分的大小是有限的。
旧版本的 Windows 直接使用此方法,并且在创建新项目时会失败。
上次我检查 Windows 7+ 时,这种情况已经消失(操作系统为整个 DLL 使用 1 个插槽 - 作为到线程本地映射的重定向),但有一个不同的限制,它限制了可用的唯一插槽的数量。每个加载的 DLL 都使用一个槽,因此可以使用线程本地存储的 DLL 数量受到限制。
也可以看看维基百科:线程本地存储 https://en.wikipedia.org/wiki/Thread-local_storage#Windows_implementation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)