为什么我的代码会因为函数内部有显式构造函数的静态对象的声明而崩溃
Why is my code blowing because of declaration of a static object with explicit constructor inside a function?
当我声明一个在函数中有显式构造函数的类栏的静态对象时,我会得到很多我没有预料到的stdc++库开销(包括异常处理,尽管有-fno异常)
class bar
{
public:
bar() { a=0; };
private:
int a;
};
void func()
{
static bar tbar;
}
如果bar的构造函数没有显式声明,我就不会得到这个开销。我使用的是gcc V4.5.2。
那里发生了什么?
通过检查安腾C++ABI,我发现编译器试图实现函数范围静态变量的保护变量线程安全:
if (obj_guard.first_byte == 0) {
if ( __cxa_guard_acquire (&obj_guard) ) {
try {
... initialize the object ...;
} catch (...) {
__cxa_guard_abort (&obj_guard);
throw;
}
... queue object destructor with __cxa_atexit() ...;
__cxa_guard_release (&obj_guard);
}
}
由于这个原因,异常处理等被包括在内,导致代码大小大幅增加。。。嵌入式项目不可接受。要禁用此线程安全行为,请使用编译器选项
-fno线程安全静态
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- enable_if转换构造函数(静态强制转换,is_base_of)
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- C++构造函数和静态成员
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 了解类构造函数的静态强制转换
- 静态类属性,C++中的多个构造函数
- 函数指针静态,构造函数
- 如何初始化堆,以便静态构造函数可以在常规 MFC dll 中使用堆?
- C++返回容器的静态构造函数
- 模拟模板类的静态构造函数
- c++中的静态构造函数和致命错误LNK1120:1个未解析的外部
- 访问std :: MAP中的静态构造函数New New拨号
- 静态构造函数的顺序与组合是否正确
- 在 c++ 中实现静态构造函数不起作用
- 是否可以使用静态构造函数初始化式
- 在我自己的操作系统内核上的c++静态构造函数
- 从静态构造函数代码调用pthread库时失败