C++笔记之静态存储区、数据段、BSS段的区别?官方术语分别是?有时候不知叫区还是段?

发布时间:2026/7/31 3:09:01
C++笔记之静态存储区、数据段、BSS段的区别?官方术语分别是?有时候不知叫区还是段? C++笔记之静态存储区、数据段、BSS段的区别?官方术语分别是?有时候不知叫区还是段?code review!文章目录C++笔记之静态存储区、数据段、BSS段的区别?官方术语分别是?有时候不知叫区还是段?1.静态存储区、数据段、BSS段的区别?官方术语分别是?有时候不知叫区还是段?2.const变量、字符串字面量在哪?3.只读数据段、常量区4.C++面试官:静态、全局变量、const变量储存位置分别在哪?用最简短的话直接回答5.ELF 规范是什么?1.静态存储区、数据段、BSS段的区别?官方术语分别是?有时候不知叫区还是段?这三个词其实来自三个不同层面的规范,混淆的根源就在这里。"静态存储区"是编程语言层面的概念,而且严格说它不是官方术语。C/C++ 标准里根本不描述内存布局,只定义"存储期"(storage duration)。官方说法是"静态存储期"(static storage duration,见 C 标准 6.2.4、C++ 标准 [basic.stc.static]),指的是对象的生存期从程序启动持续到程序结束。全局变量和static变量都具有静态存储期。至于这些对象放在内存的哪个"区",标准完全不管——所谓"静态存储区"是教材为了讲解方便造出来的通俗说法,大致对应下面要说的 .data + .bss(有时还把 .rodata 算进去)。数据段和 BSS 段是目标文件/可执行文件格式层面的概念,官方术语是 section(节)。以 ELF 规范为准,.data是一个 section,存放已初始化(且初始值非零)的全局变量和静态变量,它在文件里实际占用空间;.bss也是一个 section,存放未初始化或初始化为零的全局/静态变量,它在文件里不占空间,只记录一个大小,加载时由系统清零。BSS 是历史名字 “Block Started by Symbol”,来自 1950 年代的汇编器。“段”(segment)在 ELF 里另有严格定义,指的是加载视图。ELF 文件有两套视图:链