当前位置:首页 > 内存 > 正文

堆内存释放(堆内存存储什么)

  • 内存
  • 2024-06-26 22:29:15
  • 8878

一、C++堆中内存在函数调用结束时会释放吗当C++执行一个函数时,它首先为函数体分配一部分内存来存储函数的操作。执行后,函数的变量将被释放,但函数体(即函数代码)将被释放。没有被释放。它将永远存在于代码中。也可以随叫随到。函数返回的值将放置在您定义的变量中。如果没有收到返回值,则返回值将被丢弃。默认析构函数不执行任何操作。如果想释放内存,需要自己添加。析构函数是在对象生命周期结束时自动调用的最终函数。您可以控制需要实现的任何功能。
二、堆栈是什么?程序内存分配知识点

在计算机领域,栈是一个不可忽视的概念,但是很多人,甚至是计算机专业人士,都不明白栈其实是两种数据结构。栈是一种数据项按顺序排列的数据结构,数据项只能在一端(称为栈顶)插入和删除。
📚堆和栈的区别
堆:随机顺序;堆栈:后进/先出(Last-in/First-out)。
🧱内存分配
C/C++编译的程序所占用的内存分为以下几部分:栈区、堆区、全局区(静态区)、字面静态区、程序区代码区。
📊堆栈区
由编译器自动分配和释放,用于存储函数参数值、局部变量值等。它的工作原理类似于数据结构中的堆栈。
📈堆区
一般由程序员分配和释放。如果程序员不释放它,当程序终止时它可以被操作系统回收。注意,它在数据结构上与堆不同,分配方式类似于链表。
🌍全局区(静态区)
全局变量和静态变量存放在一起,已初始化的全局变量和未初始化的全局变量相邻。程序结束后由系统释放。
📝文字常量字段
常量字符串保存在这里,程序终止后由系统释放。
💻程序代码区
存放函数体的二进制代码。
🌟示例程序
是前辈写的,很详细。
📌分配内存
分配的10和20字节的区域在堆区域。
🔍搜索字符串
123456\0被放置在常量字段中,编译器可以将其优化到与P3指向的“123456”相同的位置。


三、编程中内存分为四个区

我在一家知名软件公司培训的时候,老师好像说过这句话。编程过程中使用的内存分为四个区域:堆区、堆栈区、静态区和代码区。
📦堆区
堆区:在使用过程中动态申请的内存区域,例如B.C/C++语言中使用malloc()/new动态申请的内存区域。这就是特点需要程序员使用free()/delete来释放这块内存空间,否则程序执行后会出现内存泄漏和错误!
📚堆栈区
堆栈区:存放程序执行时的局部数据和临时变量。当程序退出时,内存会自动释放,而无需程序员释放它。
📊静态区
静态区:存放静态变量(如staticinta,是静态变量,存放在该区域)和全局变量(特别注意全局变量是
💻代码区
代码区:存放程序代码
👨‍💻内存使用的含义
如果你会实际开发项目,你就会知道内存使用不当造成的内存占用有多么重要,而且很难发现,所以掌握这部分对你会有好处!