标签:因此 成员 c++11 对象 线程 将不 编译 tin 运行时
1. static变量,包括内置数据类型和自定义对象是在何时进行内存分配和初始化的?
全局变量,文件域静态变量,类的静态成员变量在mian函数执行之前的静态初始化过程中分配内存并进行初始化。
局部静态变量,在第一次使用时分配内存并进行初始化。
以上规则适用于内置数据类型和自定义对象类型。
2. static变量的初始化是否是线程安全的?
非局部静态变量在main函数执行前完成了内存分配和初始化,一般认为是线程安全的。
局部静态变量在编译时,编译器在初始化语句前设置一个局部静态变量来判断是否已经完成初始化,运行时每次进行判断,如果此变量为true,将不再执行初始化过程,由于对象的初始化过程不是原子操作,有可能出现局部静态对象未完成初始化,却被使用的情况,因此它不是线程安全的。
类似static singletan& getInstance(){static singletan s_instance; return s_instance;}不是线程安全的,有可能返回未完成初始化的对象。
C++11标准中要求保证局部静态变量的初始化是线程安全的,以来编译器的实现。
3. 各种变量的内存分配时机和初始化时机?
标签:因此 成员 c++11 对象 线程 将不 编译 tin 运行时
原文地址:https://www.cnblogs.com/tjuliujie/p/10011270.html