C++----变量存储空间

一个典型的可执行程序在运行时的内存布局大致如下:

区域 英文名 内容 特性
代码段 .text 可执行机器指令 只读 + 可执行
只读数据段 .rodata 常量字符串、const 全局变量(有时) 只读
数据段 .data 已初始化的全局/静态变量 可读可写
BSS 段 .bss 未初始化的全局/静态变量 可读可写,程序启动时清零
heap 动态分配的内存(new / malloc 可读可写
stack 局部变量、函数调用信息 可读可写

常量区≈只读数据段,可以对照上下进行匹配。

区域 说明
代码区 (Text Segment) 存放程序指令、常量字符串、只读常量
全局/静态区 (Data Segment) 存放全局变量、静态变量(分为初始化和未初始化两部分)
常量区 (Read-only Segment) 通常包含只读常量,如 "abc" 字符串字面量、const 全局常量
栈区 (Stack) 局部变量、函数参数
堆区 (Heap) 动态分配(new / malloc)的数据
情况 是否在常量区 说明
const int a = 10; (在函数外) ✅ 常量区(只读) 全局作用域,静态存储期
const int a = 10; (函数内) ❌ 栈区 局部变量,仍在栈上,只是不能改值
static const int a = 10; ✅ 静态区(可能合并到常量区) 静态存储期
const char* s = "hello"; "hello" ✅ 在常量区s ❌ 在栈区 指针在栈上,指向常量区字符串
const int arr[] = {1,2,3}; (全局) ✅ 常量区 静态存储期
const int arr[] = {1,2,3}; (函数内) ❌ 栈区 数组内容在栈上,不能修改

关于C++中是否给const全局变量开辟空间,可以看这一篇博文:c语言中const修饰的局部变量和全局变量存放在哪个区域_const定义的全局常量存储在-CSDN博客

相关推荐
汉克老师3 分钟前
GESP2026年3月认证C++三级( 第一部分选择题(9-15))
c++·字符串·数组长度·反码·枚举算法·gesp三级·gesp3级
大鹏说大话13 分钟前
Java 锁膨胀机制深度解析:从偏向锁到重量级锁的进化之路
开发语言·c#
IT猿手17 分钟前
基于 ZOH 离散化与增量 PID 的四旋翼无人机轨迹跟踪控制研究,MATLAB代码
开发语言·算法·matlab·无人机·动态路径规划·openclaw
IT猿手17 分钟前
基于控制障碍函数(Control Barrier Function, CBF)的无人机编队三维动态避障路径规划,MATLAB代码
开发语言·matlab·无人机·动态路径规划·无人机编队
huaweichenai20 分钟前
java的时间操作介绍
java·开发语言
就不掉头发24 分钟前
C++右值与右值引用
开发语言·c++
IT猿手30 分钟前
基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码
开发语言·matlab·无人机·动态路径规划
炸膛坦客32 分钟前
单片机/C/C++八股:(十六)C 中 malloc/free 和 C++ 中 new/delete 有什么区别?
c语言·开发语言·c++
@insist12332 分钟前
软件设计师-组网技术基础:网络设备、传输介质与局域网核心协议
开发语言·网络·软考·软件设计师·软件水平考试
CSDN_Colinw1 小时前
C++中的工厂方法模式
开发语言·c++·算法