关于全局变量引发的内存问题探源

一、引子

在 C++ 中,全局和静态变量在程序中断时会被析构,无论是从 main 函数返回还是调用 exit()。然而,静态变量的构造、析构函数调用顺序是不确定的,甚至随着构建变化而变化,这样会导致许多难以预料的 bug。

笔者就曾在工作中遇到一个因静态变量引发的 core dump 问题,大费周折才调查清楚。此类问题非常有研究价值,从中能加深对编译器和链接器的理解,窥探到那些汇编程序员才会关注的隐秘细节,也能让你更加认识你自己——离一名合格的 C++ 程序员究竟还有多少距离。

闲话少说,让我们回到事故现场,细细道来。从 dump 文件获取到的 backtrace 如下:

One Comment

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注