资讯动态

C/C++——内存管理

发布时间:2026/8/19 20:33:11 来源:尧图企业网站定制
C/C——内存管理个人主页ꪔ小林Y✨个人专栏《C小白闯关日记》《C语言小白闯关日记》《数据结构入门——从原理到实战》,《拾光Linux》代码信条每一行代码都是成长的脚印每一次调试成功都是对坚持的回应目录C/C——内存管理1.C/C程序区域内存划分2.C语言中动态内存管理方式malloc/calloc/realloc/free3.C内存管理方式new/delete4.malloc/free和new/delete的区别1.C/C程序区域内存划分栈区stack在执行函数时函数内局部变量的存储单元都可以在栈上创建函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中效率很高但是分配的内容容量有限。栈区主要存放运行函数而分配的局部变量函数参数返回数据返回地址等。堆区heap一般由程序员分配释放若程序员不释放程序结束时可能由OS操作系统回收。分配方式类似于链表。数据段静态区static存放全局变量静态数据。程序结束后由系统释放。代码段存放函数体类成员函数和全局变量的二进制代码2.C语言中动态内存管理方式malloc/calloc/realloc/free3.C内存管理方式new/deletenew的原理调用operator new函数申请空间在申请的空间上执行构造函数完成对象的构造delete的原理在空间上执行析构函数完成对象中资源的清理工作调用operator delete运算符**函数释放对象的空间intmain(){int*p5newint;//动态开辟单个对象int*p6newint[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——内存管理的内容就结束了。如果文中有表述不准的地方或是你有更清晰的理解思路强烈欢迎在评论区留言交流——技术路上多碰撞才能更快进步觉得内容对你有帮助的话别忘了点赞❤️➕收藏方便后续回顾复习想跟着一起系统学习数据结构的朋友也可以点击关注下一期我们会聚焦更进一步的学习。不见不散✌️

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价