C++学习<1>程序分区

C++的代码程序可以分为下面四个区:

(1)代码区:

存放函数体二进制代码,由操作系统管理

(2)全局区:

存放全局变量、静态变量、常量。

(3)堆区:

由程序员自行划分和释放,如果不释放堆区则会由操作系统自动释放

(4)栈区:

编译器自动分配,函数参数和局部变量均属于栈区。

详解:

(1)代码区

在程序未执行前:

代码区可存放CPU机器指令,具有共享和只读的特点。

共享指的是:内存共用一份代码。

只读指的是:不可修改代码,防止意外篡改指令。

(2)全局区

存放:局部变量、全局变量、const修饰的全局常量、字符串常量。

验证:

cpp 复制代码
#include <iostream>

using namespace std;

//全局变量
int g_a = 10;
int g_b = 10;

//全局静态常量
static int s_g_a = 10;
static int s_g_b = 10;

//const修饰的全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main()
{
	//局部变量
	int a = 10;
	int b = 10;
	cout << "局部变量a的地址是:" << &a << endl;
	cout << "局部变量b的地址是:" << &b << endl;

	//const修饰的局部常量
	const int c_l_a = 10;
	const int c_l_b = 10;
	cout << "const修饰的局部常量c_l_a的地址是:" << &c_l_a << endl;
	cout << "const修饰的局部常量c_l_b的地址是:" << &c_l_b << endl;

	//全局变量的地址
	cout << "全局变量g_a的地址是:" << &g_a << endl;
	cout << "全局变量g_b的地址是:" << &g_b << endl;

	//全局静态变量的地址
	cout << "全局静态变量s_g_a的地址是:" << &s_g_a << endl;
	cout << "全局静态变量s_g_b的地址是:" << &s_g_b << endl;

	//静态变量
	static int s_a = 10;
	static int s_b = 10;
	cout << "静态变量s_a的地址是:" << &s_a << endl;
	cout << "静态变量s_b的地址是:" << &s_b << endl;

	//常量(字符串常量和const修饰的全局常量)
	cout << "字符串常量Hello World的地址是:" << &"Hello World" << endl;
	cout << "const修饰的全局常量c_g_a的地址是:" << &c_g_a << endl;
	cout << "const修饰的全局常量c_g_b的地址是:" << &c_g_b << endl;

	return 0;
}

局部变量和const修饰的局部常量不存放在全局区中。

总结:C++在程序运行前分为代码区和全局区。

(3)栈区

局部变量、函数的形参都存放于栈区上。

因此,在函数中,不要返回局部变量的地址,栈区开辟的数据由操作系统自动释放

(4)堆区

堆区由程序员自动管理,结束时由OS回收

程序员可以使用new在堆区开辟数据。

相关推荐
醉颜凉1 小时前
Java 必看:如何彻底避免 HashMap 多线程死循环问题?
java·开发语言
默 语1 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
Brilliantwxx1 小时前
【STM32】 I2C_EEPROM_test 工程(实战篇)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
清水白石0081 小时前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
kolyle1 小时前
万级 QPS 下的 Token 分发系统架构:从 0 到 1 跑通 AI 时代的“水电煤“
开发语言·人工智能·系统架构·token·qps·极智词元·大模型私有化部署
caoerzhong2 小时前
JeeWMS 开源仓库管理系统 GPL-3.0 合规指南:Java WMS 二次开发前必须弄清的授权边界
java·开发语言·开源·vue
Patrick在香港2 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据
Sylvia33.2 小时前
火星数据体育API|一站式接入足球篮球电竞等18+项目实时数据
java·开发语言·python·websocket·游戏
Data_Journal3 小时前
使用 AutoScraper 进行网页抓取:分步教程
大数据·开发语言·数据库·python·scrapy