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在堆区开辟数据。

相关推荐
“AI国潮设计-小江”3 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人3 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
by209995 小时前
vector 的模拟实现:扩容与边界的详细阐述(下)
c++·经验分享·vector·动态数组
sunshine22 girl5 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
菜鸟~noob2335 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
惊讶的猫6 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_6 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython
搭贝7 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子7 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
\光辉岁月/7 小时前
7.javase-面向对象
java·开发语言