在流行的现代操作系统中,是否存在线程本地存储的已知大小限制?

Is there a known size limit of the thread local storage in a prevalent modern OS?

本文关键字:存储 线程 流行 操作系统 存在 是否      更新时间:2023-10-16

当我使用thread_local, _Thread_local, __thread__declspec(thread)时,编译器似乎在线程创建时分配线程本地存储,并将地址存储在x86派生系统的fsgs寄存器中。

在这种情况下,是否存在类似"线程本地存储溢出"的东西?

这是有限制的。每个系统都是不同的,但在Windows上,有一个有限的数据部分是专门映射线程的。这部分的大小是有限的。

旧版本的windows直接使用这个,当创建新项目时会失败。

上次我在Windows 7+上检查时,这种情况已经消失了(操作系统为整个DLL使用1个插槽-作为重定向到线程本地映射),但是有一个不同的限制,限制了可用的唯一插槽的数量。每个加载的DLL都使用一个插槽,因此可以使用线程本地存储的DLL数量是有限制的。

参见wikipedia:线程本地存储