内存泄漏、内存溢出、内存越界、段错误、堆溢出、栈溢出
内存泄露
内存泄漏(memory leak)是应用程序分配某段内存后,由于疏忽或者错误,失去了对该段内存的控制,因而造成了内存的浪费。
或者可以说向系统申请分配内存进行使用(new),但是用完后不归还(delete),导致占用有效内存。
简而言之:调用了malloc/new等申请内存的操作,但是缺少了对应的free/delete操作。
内存溢出
内存溢出就是要求分配的内存超出了系统所给的。要求的超出分配的。
主要有:堆溢出、 栈溢出、内存永久保护区溢出
内存溢出原因:(1)内存中加载的数据量过于庞大,如一次性从数据库取出过多数据。(2)集合类中有对对象的引用,使用后未清空,使得不能回收。(3)代码中存在死循环或循环产生过多重复的对象实体。(4)使用的第三方软件中的bug(5)启动参数内存值设定的过小
栈溢出
栈溢出就是由于递归或循环嵌套层次太多造成的。
1)局部数组过大。当函数内部的数组过大时,有可能导致栈溢出。
2)递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致栈溢出。
3)指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。
栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。具体查内存分配。
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
堆溢出
堆是程序员自己创建的,通常来说,导致堆溢出的操作是不断的new 一个对象,一直创建新的对象,但是不销毁。
内存越界
是指向系统申请一块内存后,使用时却超出申请范围。比如一些操作内存的函数:sprintf、strcpy、strcat、vsprintf、memcpy、memset、memmove。当造成内存泄漏的代码运行时,所带来的错误是无法避免的,通常会造成
1.破坏了堆中内存内存分配信息数据
2.破坏了程序其他对象的内存空间
3.破坏了空闲内存块
段错误
“段”(Segment)是指二进制文件内的区域,所有某种特定类型信息被保存在这里。可以用size程序得到可执行文件中各个段的大小。
C程序布局中分为代码段、初始化数据段、非初始化数据段、栈段和堆段。段错误就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的,还有可能是缺少文件或者文件损坏。
段错误产生典型的原因
非关联化空指针——这是特殊情况由内存管理硬件
试图访问一个不存在的内存地址(在进程的地址空间)
试图访问内存的程序没有权利(如内核结构流程上下文)
试图写入只读存储器(如代码段)
内存泄漏、内存溢出、内存越界、段错误、堆溢出、栈溢出相关推荐
- c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)
1.1内存溢出:(Out Of Memory---OOM) 系统已经不能再分配出你所需要的空间,比如你需要100M的空间,系统只剩90M了,这就叫内存溢出 例子:一个盘子用尽各种方法只能装4个果子,你 ...
- Android 性能优化之内存泄漏检测以及内存优化(上)
在 Java 中,内存的分配是由程序完成的,而内存的释放则是由 Garbage Collecation(GC) 完成的,Java/Android 程序员不用像 C/C++ 程序员一样手动调用相关函数来 ...
- 常规循环引用内存泄漏和Closure内存泄漏
常规循环引用内存泄漏和Closure内存泄漏 要了解javascript的内存泄漏问题,首先要了解的就是javascript的GC原理. 我记得原来在犀牛书<JavaScript: The De ...
- java内存泄漏怎么检测_JAVA内存泄漏原因和内存泄漏检测工具
JAVA内存泄漏原因和内存泄漏检测工具 摘要 虽然Java 虚拟机(JVM)及其垃圾收 集器(garbage collector,GC)负责管理大多数的内存任务,Java 软件程序中还是有可能出现内 ...
- python会内存泄漏吗_Python内存泄漏和内存溢出的解决方法
Python内存泄漏和内存溢出的解决方法 发布时间:2020-10-30 23:08:34 来源:亿速云 阅读:92 作者:Leah 这篇文章将为大家详细讲解有关Python内存泄漏和内存溢出的解决方 ...
- python内存泄漏解决方案_Python内存泄漏和内存溢出的解决方案
一.内存泄漏 像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题. 对于一个用 python 实现的,长期运行的后台服务进程来说,如果内存持续增长,那么很可能是 ...
- java 内存溢出和内存泄漏_java中内存溢出和内存泄漏的区别
虽然在java中我们不用关心内存的释放, 垃圾回收机制帮助我们回收不需要的对象,但实际上不正当的操作也会产生内存问题:如,内存溢出.内存泄漏 内存溢出:out of memory:简单通俗理解就是内存 ...
- linux踩内存怎么定位,问题定位:内存泄漏,踩内存。
1.内存泄漏 确定现象: linux 内存泄漏,可以查看slabinfo 和另外一个proc下(貌似meminfo),关于内存的信息,可以看到内存是否在不断减少,以及减少的速度. vxworks系统, ...
- linux如何定位内存泄漏,快速定位内存泄漏的套路(linux)
快速定位内存泄漏的套路(linux) 快速定位内存泄漏的套路(linux) https://blog.csdn.net/xieyihua1994/article/details/105248362/ ...
- 电脑是否存在内存泄漏_STM32裸机内存管理解析
概述 在计算机系统中,变量.中间数据一般存放在系统存储空间中,只有实际使用的时候才将他们从存储空间调入到中央处理器内部进行计算.通常存储空间分为两类:内部存储空间和外部存储空间.对于电脑来讲,内部存储 ...
最新文章
- oracle更改密码机制,Oracle密码机制以及常用操作
- PowerPath/VE:EMC夯实虚拟环境的独门武器
- 6.1.2.6 盒子
- 基于蚂蚁金服「如何管理好10万行代码」搭建了 Vue 项目架构
- 车位预定查询html格式,停车场车位预定方法
- SVN与git的区别【图文经典版】
- SAP Fiori Elements 里 Smart Table column 的宽度问题
- 【汇编语言】8086汇编,快速搞定各种寻址方式:立即数寻址 / 寄存器寻址 / 存储器寻址
- 1034. 有理数四则运算(20)
- Python 浅拷贝和深拷贝 - Python零基础入门教程
- VB制作控件之图片命令按钮➀
- STM32F103C8T6在Arduino框架下驱动ssd1306 0.96“ IIC OLED显示
- PS学习笔记6-选区工具
- EmmyLua Unity断点调试
- 硬件工程师学习英语必备
- 超详细实现淘宝静态页面(附全部代码)
- csgo准星设置代码_csgo准星设置指令
- 矢量数据shp七个文件介绍_读取矢量数据
- Xilinx FPGA 配置之ICAP
- python降版本的影响_降低python版本的操作方法