news 2026/8/19 20:33:04

C/C++——内存管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C/C++——内存管理

C/C++——内存管理

🌈个人主页:@ꪔ小林Y
个人专栏:《C++小白闯关日记》,《C语言小白闯关日记》,《数据结构入门——从原理到实战》,《拾光Linux》
🍀代码信条每一行代码都是成长的脚印👣,每一次调试成功都是对坚持的回应

目录

  • C/C++——内存管理
    • 1.C/C++程序区域内存划分
    • 2.C语言中动态内存管理方式:malloc/calloc/realloc/free
    • 3.C++内存管理方式:new/delete
    • 4.malloc/free和new/delete的区别

1.C/C++程序区域内存划分

  1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内容容量有限。栈区主要存放运行函数而分配的局部变量,函数参数,返回数据,返回地址等。
  2. 堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)回收。分配方式类似于链表。
  3. 数据段(静态区):(static)存放全局变量,静态数据。程序结束后由系统释放。
  4. 代码段:存放函数体(类成员函数和全局变量)的二进制代码

2.C语言中动态内存管理方式:malloc/calloc/realloc/free

3.C++内存管理方式:new/delete

  • new的原理:调用operator new函数申请空间;在申请的空间上执行构造函数,完成对象的构造
  • delete的原理:在空间上执行析构函数,完成对象中资源的清理工作;调用operator delete运算符**函数释放对象的空间
intmain(){int*p5=newint;//动态开辟单个对象int*p6=newint[10];//动态开辟数组deletep5;delete[]p6;}

4.malloc/free和new/delete的区别

malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。
区别是:

  • malloc和free是函数,new和delete是操作符
  • malloc申请的空间不会初始化,new可以初始化
  • malloc申请空间时,需要手动计算空间大小并传递,new只需要在其后面跟上空间的类型即可,如果是多个对象,[ ]中指定对象个数即可
  • malloc的返回值为void*,在使用时必须强转,new不需要,因为new后跟的是空间的类型
  • malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常
  • 申请自定义类型对象时,malloc/free只会开辟空间不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化delete释放空间前会调用析构函数完成空间中资源的清理释放

🎊到这儿,C/C++——内存管理的内容就结束了。如果文中有表述不准的地方,或是你有更清晰的理解思路,强烈欢迎在评论区留言交流——技术路上多碰撞,才能更快进步

觉得内容对你有帮助的话,别忘了点赞❤️➕收藏🌟,方便后续回顾复习;想跟着一起系统学习数据结构的朋友,也可以点击关注,下一期我们会聚焦更进一步的学习。不见不散✌️

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 20:19:11

Andy.scss 部署全解析:Bower、Ruby Gem 与手动引入三种方式对比

Andy.scss 部署全解析:Bower、Ruby Gem 与手动引入三种方式对比 【免费下载链接】andy Open-Source Collection of Useful SASS Mixins Library 项目地址: https://gitcode.com/gh_mirrors/an/andy Andy.scss 是一款开源的 Sass Mixins 工具库,汇…

作者头像 李华