C++面试题更新 2026-08-03

请解释 C++ 中未初始化的全局变量和已初始化的全局变量分别存储在内存的哪个区域?如果将全局变量的定义放在头文件中,会引发哪些问题?

考察说明

考察全局变量的存储位置以及头文件中定义全局变量的潜在问题。

回答思路

  1. 【回答框架 1】已初始化的全局变量存放在数据段,未初始化的全局变量存放在 BSS 段。
  2. 【回答框架 2】BSS 段在程序加载时由内核清零,数据段则保留初始化值。
  3. 【回答框架 3】头文件中的全局变量定义在多文件包含时可能导致多重定义链接错误,除非使用 extern 声明。
  4. 【回答框架 4】如果头文件中定义 const 全局变量,在 C++ 中默认具有内部链接,每个翻译单元有一份拷贝,可能增加内存开销。
  5. 【关键点 1】已初始化全局变量在数据段,未初始化在 BSS 段。
  6. 【关键点 2】头文件定义全局变量会引起多重定义链接错误。
  7. 【关键点 3】const 全局变量在 C++ 默认内部链接,可避免链接错误但可能增加内存。
  8. 【易错点 1】错误认为未初始化变量不在任何段,实际上在 BSS 段。
  9. 【易错点 2】混淆声明与定义,头文件中应使用 extern 声明而非定义。
  10. 【易错点 3】忽略 C++ 中 const 全局变量的特殊链接属性。