首页 > 其他分享 >VC和GCC静态变量析构顺序不同

VC和GCC静态变量析构顺序不同

时间:2023-06-15 23:08:42浏览次数:49  
标签:GCC VC 变量 静态 getB 顺序 析构


VC和GCC静态变量析构顺序不同

(金庆的专栏)

静态变量析构顺序正常情况下是构造的反序。
但是VC对DLL中的静态变量好像是需等待DLL卸载时再析构,
表现为主程序中的静态变量先析构,DLL中的静态变量后析构。
VC测试版本为VC2010Express.

例如:

class A {};
static A s_a;

int main()
{
    extern B & getB();  // defined in b.dll
    B & rb = getB();
    return 0;
} 


b.dll中有个静态变量s_b: 

class B;
B & getB()
{
    static B s_b;
    return s_b;
}


Vc的执行顺序为:
A()
B()
~A()
~B()

而Gcc的执行顺序为:
A()
B()
~B()
A()


标签:GCC,VC,变量,静态,getB,顺序,析构
From: https://blog.51cto.com/u_16162321/6495458

相关文章

  • VC2010工程依赖不再自动链接
    发现VC2010Express 设置了ProjectDependencies之后并没有自动链接.而在VC2008中工程依赖不仅影响构建顺序,也会自动链接依赖项.具体说明见:http://blogs.msdn.com/b/vcblog/archive/2010/02/16/project-settings-changes-with-vs2010.aspx现在应该使用References来设置依赖......
  • VC2010编译 thrift compiler
    VC2010编译thriftcompiler需flex,bison.bison依赖m4,regex.Pre-Buildevent中flex命令有误,-o与参数间不应该有空格。flex-o"src\\thriftl.cc"src/thriftl.llbison-y-o"src\thrifty.cc"--defines="src/thrifty.h"src/thrifty.yycompiler......
  • 使用MockMvc测试 Controller
    使用MockMvc可以做到controller层的测试。如果直接得到controller,然后调用指定的方法是不会通过拦截器等外层组件的,使用mockMvc可以。packagecom.lomi.mockMvc;importcn.hutool.json.JSONUtil;importcom.lomi.controller.TestController;importcom.lomi.entity.Goods;im......
  • rpcz VC2010 构建
    rpczVC2010构建rpcz是应用ZeroMQ和Protobuf开发的RPC.见:https://github.com/reinferio/rpcz及https://code.google.com/p/rpcz/rpcz的CMake脚本应该是仅用于Linux.用于VC需要更改错误。CMakeErroratD:/ProgramFiles/CMake2.8/share/cmake-2.8......
  • fatal: unable to access 'https://github.com/JiangYuLab/CNVcaller.git/': TCP conn
     001、gitclone报错 002、解决方法进入github官网,搜索该项目 003、上传至linux、解压[root@PC1test2]#unzipCNVcaller-master.zip ......
  • VC "post-built step" 的妙用
    VCIDE:Project-> Setting-> Post-buildStep可以添加编译连接完成时额外执行的命令。一般用来将编译生成的执行程序或库文件复制到别的目录。使用$(targetpath)命令,就可以执行目标程序。多数人不知道的是:执行程序或命令的输出为Build输出......
  • VCL下ListBox自画
    最终效果图: ListBox的两个设置:自画事件:LixtBox1DrawItemprocedureTForm1.LixtBox1DrawItem(Control:TWinControl;Index:Integer;Rect:TRect;State:TOwnerDrawState);beginWithLixtBox1.CanvasDoBeginBrush.Color:=$00FF9184;//设置背景......
  • 如何使用libavcodec将.yuv图像序列编码为.h264的视频码流?
    1.实现打开和关闭输入文件和输出文件的操作点击查看代码//io_data.cppstaticFILE*input_file=nullptr;staticFILE*output_file=nullptr;int32_topen_input_output_files(constchar*input_name,constchar*output_name){if(strlen(input_name)==0||strlen(ou......
  • MegEngine 使用小技巧:如何做 MegCC 的模型性能评测
    MegCC 是一个深度学习模型编译器,具有以下特点:极轻量级运行时:只在二进制文件中保留所需的计算内核。例如,MobileNetv1的81KB运行时间高性能:每个操作都经过专家精心优化便携:只生成计算代码,易于在Linux、Android、TEE、BareMetal上编译和使用LowMemoryUsagewhileBootIn......
  • NVC低功耗语音芯片制氧机方案,提升用户体验同时降低开发成本
    家用制氧机是一种可以通过空气中提取氧气,制造出高浓度的氧气供给需要氧气治疗的患者使用的设备。为了提高用户使用体验和操作便捷性。很多厂商会通过加入语音芯片实现语音提示功能,用户可以通过听到语音提示来了解制氧机的状态和操作指引,从而更加方便地使用制氧机。 那么家用......