一、C++内存分布原则

  • 1、全局静态看程序生命周期(全局/静态区),局部临时变量看栈空间(Stack),动态申请看堆空间(Heap),字面常量只读区(常量区),函数指令代码区(.text)

  • 2、特殊情况:全局const在常量区,局部cosnt在栈区

二、内部布局图

高地址  0x7FFF...  ┌─────────────┐
                   │   栈 (Stack)  │  ← 局部变量、函数参数、返回地址
                   ├─────────────┤
                   │    空闲区     │
                   ├─────────────┤
                   │   堆 (Heap)   │  ← new/malloc 动态分配
                   ├─────────────┤
                   │  全局/静态区   │  ← 细分为 .data 和 .bss
                   │  (Global)    │
                   ├─────────────┤
                   │ 常量区 (.rodata)│ ← 字符串字面量、全局 const
                   ├─────────────┤
低地址  0x0804...  │ 代码区 (.text) │ ← CPU 执行的机器指令
                   └─────────────┘

三、全局变量默认值问题

  • 未初始化的全局变量和静态变量的默认值为0;因为.bss段数据在程序加载时由操作系统强制清零(memset),只有栈上的局部未初始化变量才是随机值。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐