内存泄漏——恶魔天使之战(操作内存必看)
文章目录
前言
不知道大家有没有听过这样一句话:一个c++程序员,内存泄漏了,一包烟,一杯茶,一下午,码神本来不信这句话,直到今天,我领悟了内存泄漏的危险情况,所以临时更新一次
一、c++操作内存的优点与缺点
如果有学过其他语言的应该知道,C++给我们的可操作性实在太大了,它让我们可以操作内存,高性能随之而来,但是天使与恶魔总是共存的,来了操作内存,内存泄漏也随之而来,像今天的码神一样,哭了 所以内存的操作也可能导致一些最隐蔽的bug出现 例如:
- 内存耗尽——死机
- 出现一些隐藏的bug——不知道什么时候出错
二、内存操作
1.指针
提到内存操作,我感觉非插一句指针不行,有时间我单独更新一期指针,今天先简单说一下,具体等指针单独说,原谅我的困 指针:首先指针是一个变量,其储存的是值的地址,而不是其值本身, 例如:int *a=10,,a就是地址,*a为10
泄漏1:
int *a; *a=123; 这就是一个入门级的指针泄漏,a是一个指针但是他没有被初始化,但它指向哪里呢?so它可能指向任何地址,可能有任何值,如果a恰好指向100,那么它可能就不是储存123的地方,这可能在当时没有太大问题,但是埋下了恶魔的种子。
所以我建议:在对指针应用解引用操作符”*“时,将指针初始化为一个确定的,适当的地址
2.开辟新空间——new
如果说指针是一个坑,那么new一定是让你对他又爱又恨,天使的温柔,恶魔的报复。
内存泄漏2:
就是这个new,写说一下简单用法:
int *a=new int ;//分配一块内存给a
*a=123;//a的数值=123;
为什么会出现内存耗尽的情况? 计算机可能没有充足的空间来满足new的请求此时:delete就出现了,释放内存
delete a;//释放a的内存
这里的内存泄漏主要出现在析构函数上 注意,如果函数结束没有主动释放new的内存,new是会一直占用,直到程序结束,所以有个编码习惯就是new和delete一起使用,其中用delete在析构函数中释放内存
总结
好了,说了也不少,感觉如果要写内存还是要单独开一期指针,欢迎大家补充一下,你们遇到的内存泄漏,我再加更上去,谢啦! 总结一下吧:
- new和delete一起使用
- 在对指针应用解引用操作符”*“时,将指针初始化为一个确定的,适当的地址
原创不易,欢迎三连,白天再写几个实例
相关文章
- python dtype o_python – 什么是dtype(’O’)? – 堆栈内存溢出「建议收藏」
- 【说站】Java内存交互如何操作
- 【说站】java内存泄漏的解决方法
- [mit6.s081] 笔记 Lab5: Lazy Page Allocation | 内存页懒分配
- rust写操作系统 rCore tutorial 学习笔记:实验指导二 内存分配与管理
- 如何使用火焰图对 Rust 程序进行性能和内存占用分析
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
- 【C 语言】结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )
- 【Linux 内核 内存管理】引导内存分配器 bootmem ③ ( bootmem 引导内存分配器算法 | 低端内存映射 | 内存记录位图 | 最先适配算法 | 内存分配记录 | 内存操作函数 )
- Redis深入了解内存淘汰与事务操作
- Java 内存模型 JMM 浅析详解编程语言
- C语言原子操作的应用(内存次序,内存屏障)
- 中国投资130亿元量产相变内存 比闪存快1000倍
- Linux系统:最大内存咋调(linux系统内存多大)
- 红色的优势:Redis内存数据库技术的应用(redis内存数据库)
- 占用Linux 512内存优化实践(linux512内存)
- 利用如何利用linux系统查看内存使用情况(如何看 linux 内存)
- 8G内存中MySQL性能优化之道(8g mysql优化)
- 新手指南了解Redis内存占用情况(查询redis内存占用)
- 内存卸载Redis,释放内存空间的方法(卸载redis关闭)
- 突破瓶颈红色内存阵列的实现(redis阵列)
- 将JSP在内存生成的图片显示到页面
- PHP大批量数据操作时临时调整内存与执行时间的方法