用于本地数组和与线程交互的 C++98 和 C++11 内存模型是什么?
我不是指 C++11 thread_local关键字,它与全局和静态变量有关。
相反,我想找出在编译时分配的数组的线程保证行为是什么。编译时我的意思是“int array[100]”,这与使用new[]关键字的分配不同。我不是指静态变量。
例如,假设我有以下结构/类:
struct xyz { int array[100]; };
和以下功能:
void fn(int x) {
xyz dog;
for(int i=0; i<100; ++i) { dog.array[i] = x; }
// do something else with dog.array, eg. call another function with dog as parameter
}
从多个线程调用fn()是否安全?看来C++内存模型是:所有局部非静态变量和数组都分配在栈上,每个线程都有自己的栈。这是真的吗(即这是标准的正式一部分)?