IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C/C++内存分配一文全解 -> 正文阅读

[C++知识库]C/C++内存分配一文全解

C/C++内存分配方式——堆、栈、自由存储区、全局/静态存储区和常量存储区

栈:

??栈最主要的作用就是 存储局部变量,实现函数调用。 栈的功能和数据结构的栈一样,因此可以进行函数调用。栈的一大特点就是 内存自动分配回收。 用户进程执行时位于用户虚拟地址空间的顶部的就是用户栈。局部变量和函数参数等存储在用户栈,在这些变量作用范围失效时会自动出栈,释放所使用的存储空间。

堆:

??堆区分配也称为动态内存分配,与栈不同,堆的内存是由程序员手动完成申请和释放的。使用内存分配函数 (malloc、new)来申请 任意大小的内存,使用完之后,由程序员使用函数 (free、delete)手动的释放 申请的内存。如果程序员没有回收申请的内存,将会造成内存泄露问题(内存泄露就是内存资源的浪费,这片申请的内存空间只有该进程被杀死后才会被其他进程使用。)。

静态存储区(全局存储区)

??静态变量和全局变量是相似的,它不会随着函数的调用和退出而发生变化。 即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。在内存分配上全局变量和静态变量是存放在一起的,初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和静态变量放在另一块区域。由于全局变量是程序全程需要使用的,静态变量是不可更改的,因此该区域的内存释放只有在程序结束时释放。
??(静态变量的修饰关键字是static,static可以作用于变量以及函数。由static修饰的,可分为 静态局部变量,静态全局变量,静态函数。 static修饰类中的成员变量和成员函数成为静态成员变量和静态成员函数,这将使其成为类的一部分,而不是对象的一部分。意思就是说在创建类的一个实例的时候静态成员变量将不占用内存空间,可以减少内存消耗。)

常量存储区

??常量存储区存放的是常量,是不允许修改的,修改会报错。(非正当手段也可以修改)常量使用const修饰,常量的定义必须在定义时赋值,否则无法使用。最常见的常量是字符串常量,如果为给字符串申请内存空间就赋值,它将变成一个字符串常量,你所赋值得到的变量名只存储了该字符串常量的首地址,修改字符串将会报错。

自由存储区

??自由存储是C++中通过new和delete动态分配和释放对象的抽象概念,并不是真正意义上内存分配的存储区,通过new来申请的内存区域可称为自由存储区。
??基本上,所有的C++编译器默认使用堆来实现自由存储,也就是说new和delete是使用malloc和free来实现的,这时藉由new运算符分配的对象,说它在堆上也对,说它在自由存储区上也正确。但程序员也可以通过重载操作符,改用其他内存来实现自由存储,例如全局变量做的对象池,这时自由存储区就区别于堆了。我们所需要记住的就是:堆是操作系统维护的一块内存,而自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。堆与自由存储区并不等价。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:05:10  更:2021-11-28 11:05:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:55:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码