在流行的现代操作系统中,是否存在线程本地存储的已知大小限制?
Is there a known size limit of the thread local storage in a prevalent modern OS?
当我使用thread_local
, _Thread_local
, __thread
或__declspec(thread)
时,编译器似乎在线程创建时分配线程本地存储,并将地址存储在x86派生系统的fs
或gs
寄存器中。
在这种情况下,是否存在类似"线程本地存储溢出"的东西?
这是有限制的。每个系统都是不同的,但在Windows上,有一个有限的数据部分是专门映射线程的。这部分的大小是有限的。
旧版本的windows直接使用这个,当创建新项目时会失败。
上次我在Windows 7+上检查时,这种情况已经消失了(操作系统为整个DLL使用1个插槽-作为重定向到线程本地映射),但是有一个不同的限制,限制了可用的唯一插槽的数量。每个加载的DLL都使用一个插槽,因此可以使用线程本地存储的DLL数量是有限制的。
参见wikipedia:线程本地存储
相关文章:
- 将线程中的数据存储到全局容器的最佳方法?
- C++ 多线程原子加载/存储
- 混合 c++ 和 .net 的线程本地存储
- 存储/传递 v8 承诺解析器供以后使用的最佳实践?(结合C++线程)
- 线程上下文上的静态存储对象优化
- 在容器中存储指向对象的指针时的线程安全
- 多线程存储到文件中
- 如何使一个线程中的内存存储"promptly"在其他线程中可见?
- 创建一个以存储线程并调用它们的类
- Apache 崩溃并显示错误 R6016 没有足够的空间来存储线程数据
- Valgrind:在多线程程序中发现冲突的存储/加载
- C 静态与线程存储持续时间破坏顺序
- 线程特定数据与线程本地存储
- 多个动态链接库(DLL)是否可以从静态库(LIB)共享线程本地存储
- 线程本地存储(TLS)和OpenMP
- 线程本地存储构造函数 g++
- 在C++中将所有TLS(线程本地存储)变量设置为新的单个值
- 如何确保变量在不同的线程读取它们之前存储到内存中
- 动态提升线程运行存储在具有共享指针的向量中的对象的方法
- 选择 STL 容器来存储线程