Tag: 数据段

为什么全局变量存储在堆中?

为什么在以下示例中,全局变量存储在堆段中,而不是数据/ bss段? 从map伪文件的以下输出中,data / bss段是第3行。 这是因为它是读/写和匿名的。 以下2个条目是堆(如标签所示)。 这是/ proc // maps的输出: 00400000-00405000 r-xp 00000000 08:02 17962770 myexec 00604000-00605000 r–p 00004000 08:02 17962770 myexec 00605000-00606000 rw-p 00005000 08:02 17962770 myexec 00606000-00607000 rw-p 00000000 00:00 0 [heap] 00607000-00642000 rw-p 00000000 00:00 0 [heap] 7ffff7a15000-7ffff7bd0000 r-xp 00000000 08:02 22282470 ..libc2.19.so 7ffff7bd0000-7ffff7dcf000 —p 001bb000 08:02 22282470 ..libc-.19.so 7ffff7dcf000-7ffff7dd3000 r–p […]

C中的bss段

在关于 “ 关于Unix中的bss段和数据段 ”的问题的答案之一中,我看到对bss的解释如下: Bss是特殊的:.bss对象不占用目标文件中的任何空间,并且通过将未特别初始化的所有符号分组在一起,可以很容易地将它们一次归零。 但是当我在目标文件上使用size时,生成的代码: #include int uninit_global_var; int init_global_var=5; int main() { int local_var; return 0; } 我有以下内容 text data bss dec hex filename 1231 280 12 1523 5f3 a.out 并根据具有全局范围的未初始化数据成员查看bss的增长情况。 那么有人可以certificate上述陈述的合理性吗?