【发布时间】:2021-08-08 02:36:55
【问题描述】:
我认为 C/C++ 标准没有说明复杂性,所以我对具体的实现很好奇(我认为它们都有相同的行为)。
假设我有以下 C++ 函数。
void fn() {
thread_local char arr[1024*1024]{};
// do something with arr
}
我的程序有 80 个线程,其中 47 个线程至少运行一次 fn()。
我的程序的内存使用量是否增长了大约 47 倍某个常数,80 倍某个常数,还是有其他公式可以解决这个问题?
注意:this Java 问题由于某种原因已关闭,但如果 Java 使用与 C/C++ 相同的原语,则 IDK。
【问题讨论】:
-
这是实现定义的,也取决于应用程序。在使用请求分页和过度使用的操作系统上,操作系统不会尝试为数组查找内存,直到尝试访问它时出现页面错误。但是,在其他操作系统上,当线程启动时,每个新创建的线程都必须为其所有本地内存小马。
-
如果你认为你需要线程本地——你不需要。
-
您有具体的实现方案吗? gcc、clang、msvc 等?
-
'Thread local' 是线程的全局变量:(
-
@AyxanHaqverdili 我假设它们都使用相同的底层机制,但如果不是 clang,gcc msvc,在 Win 和 Linux 上。
标签: c++ c thread-local-storage