【维生素C语言】第十四章 - 浅析C/C++程序的内存开辟

简介: 本篇博客旨在加深动态内存开辟的理解,以 C/C++ 程序的内存开辟为主题进行简要的分析。

前言


本篇博客旨在加深动态内存开辟的理解,以 C/C++ 程序的内存开辟为主题进行简要的分析。

C/C++ 程序内存分配的区域:

1.栈区(stack)

执行函数时,函数内部局部变量的存储单元都可以在栈上创建。函数执行结束后这些存储单元会被自动释放。栈内存分配运算内置于处理器的指令集中,拥有很高的效率,但是分配的内存容量是有限的。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。


2.堆区(heap)

一般由程序员自主分配释放,若程序员不主动不释放,程序结束时可能由操作系统回收。其分配方式类似于链表。


3.数据段(data segment)

静态存储区,存放全局变量和静态数据,程序结束后由系统释放。


4.代码段(code segment)

存放函数体(类成员函数和全局函数)的二进制代码。


💬 内存区域划分图:

f50b2f5eb295bed877f09d50b2127891_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDUwMjg2Mg==,size_16,color_FFFFFF,t_70.png


📚 我们在前几章讲过 static 关键字修饰局部变量,有了这幅图,我们可以更好地理解了:

🔑 实际上,普通的局部变量是在栈区分配空间的,在栈区上创建的变量,出了作用域就会销毁。但是,如果一个变量被 static 修饰,就会存放到数据段(静态区),而在数据段上创建的变量,直到程序结束才会销毁,所以生命周期因此而变长。

栈区的特点:在上面创建的变量出了作用域就销毁。
数据段的特点:在上面创建的变量直到程序结束才销毁
相关文章
|
16天前
|
编译器 C语言 C++
C语言,C++编程软件比较(推荐的编程软件)
C语言,C++编程软件比较(推荐的编程软件)
|
1天前
|
存储 编译器 C语言
C++中的内存管理
C++中的内存管理
11 0
|
3天前
|
存储 Linux C语言
【C++从练气到飞升】07---内存管理
【C++从练气到飞升】07---内存管理
|
5天前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
20 1
|
12天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中c++模板,将编译好的C++程序放进去部署如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
12 1
|
17天前
|
存储 缓存 算法
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
|
17天前
|
存储 程序员 编译器
C++从入门到精通:3.4深入理解内存管理机制
C++从入门到精通:3.4深入理解内存管理机制
|
3月前
|
存储 关系型数据库 MySQL
C语言/C++雷霆战机代码(终极版)
C语言/C++雷霆战机代码(终极版)
|
3月前
|
存储 关系型数据库 MySQL
C语言/C++雷霆战机代码(终极版)
C语言/C++雷霆战机代码(终极版)
C语言/C++雷霆战机代码(终极版)
|
3月前
|
存储 关系型数据库 MySQL
C语言/C++实战项目雷霆飞机(代码改进)
C语言/C++实战项目雷霆飞机(代码改进)