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博客

相关推荐
Knight_AL10 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing0311 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by2099911 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河12 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮12 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻12 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble12 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
你怎么知道我是队长12 小时前
C++零基础入门第2周:数据类型、运算符与表达式完全指南(附20段可运行代码+避坑清单)
c++
say_fall13 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
码流子13 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构