静态变量的初始化与释放
由 VLD 引发的对静态变量初始化顺序的思考
前情提要:
VLD要记录每次的内存分配,它通过Windows提供的分配钩子allocation hooks来监视调试堆内存的分配。它是一个用户自定义的回调函数,在每次从堆中分配内存之前被调用,在初始化是VLD使用_CrtSetAllocation注册这个钩子函数。 全局变量在程序初始化时就初始化,如果将VLD作为一个全局变量就可以与程序一起启动,但是C/C++并没有约定全局变量初始化的顺序,如果其它全局变量的构造函数中有内存分配则可能无法检测到。
https://blog.csdn.net/fan_hai_ping/article/details/8023433
1 |
注:子模块(动态链接库)中包含 vld.h 并正确配置 vld lib 才能暴露子模块中的内存泄漏问题。
C++ 类模板的惰性会使静态成员被使用时才实例化。
模板单例模式,为保证静态变量实例化,给静态变量类型增加内联空函数,并调用之。(不影响性能,不扩大占用空间。)
https://docs.microsoft.com/en-us/cpp/preprocessor/init-seg?view=vs-2017
http://www.cnblogs.com/hgy413/archive/2011/10/15/3693581.html