C++中被初始化全局变量在编译时保存在data段中,而没有被初始化的全局变量保存在bss段中。这样保存的理由是在data段的变量在编译生成的文件中需要分配空间存储变量值,而没有初始化保存变量(或初始化为0的静态变量、全局变量)其默认值为0,没必要将这些值均为0的变量存储在data段中,而采用bss段只是给未初始化的全局变量和局部静态变量预留位置,bss段并没有内容。但是在程序执行时这些变量会占用内存空间,所以可执行文件必须记录bss段中变量占用空间的大小。
而局部变量是在程序运行时由栈分配,对于没有初始化的局部变量,VC的DEBUG版会把未初始化的变量value,初始化为sizeof(value)个0xCC。所以我们会看到未初始化的整型的值始终是-858993460,而不是任意值。有意思的是汉字“烫”的编码恰好就是1100110011001100,所以要是我们输出一段字符串的值是一长串“烫”时,那么就要注意是否是字符串没有被初始化引起的!