美文网首页C++笔记
动态分配内存的危险(浅)

动态分配内存的危险(浅)

作者: Lucky宁 | 来源:发表于2017-01-19 09:43 被阅读0次

1、内存泄漏。
原因:代码中的错误导致。
2、内存碎片。
原因:动态分配内存时内存使用不当导致的。

内存泄漏:
使用new分配空间时,最后没有用delete释放它,导致它一直占用内存,发生内存泄漏。
例如,如果丢失了已经分配内存的堆内存地址,因为改写了用于访问它的指针中的地址。这是一个很常见的问题,比如循环中,不断向内存空间申请内存,在内存空间中消耗内存的越来越多,在分配完空间后,再次申请内存时,出现错误,申请内存失败。
解决或者说避免这个问题的办法,就是在用new分配完空间后,在恰当的位置释放内存。那什么是恰当的位置?恰当的位置就是在这块内存使用完,后面不再使用它时,将他释放。
拿指针举个例子,指针是有作用域的,作用域范围是从定义它的地址开始,到他结束,用完后这个指针就不存在了,但他所占的内存仍然存在,如果不及时的释放他,他就会一直占用内存,所以在指针的作用域结束的地方用delete释放他就行。

内存碎片:
内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间。

(1)、内部产生的碎片
内存分配必须起始于可被 4、8 或 16 整除,这就导致,我在申请23个内存时,电脑会给我批下24个内存,然后我还不用那1个内存,导致出现多个1内存。这一个内存就是多余的空间,叫做内部碎片。

(2)、外部产生的碎片
频繁的分配与回收物理页面会导致大量的、连续且小的页面块夹杂在已分配的页面中间,就会产生外部碎片。
如图:

自由储存区的碎片

但这个问题少见,只需稍加知道即可。

相关文章

  • 动态分配内存的危险(浅)

    1、内存泄漏。原因:代码中的错误导致。2、内存碎片。原因:动态分配内存时内存使用不当导致的。 内存泄漏:使用new...

  • Boolan_C++面向对象高级编程(上)-第2周

    内存块 Complex 动态分配所得内存 in VC 动态分配所得的array array new 为什么要搭配a...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • C语言基础(4)——动态分配内存及文件的相关内容

    本节内容1.动态分配内存2.文件的相关内容3.动态分配内存实战——名字的输入与输出4.结构体 (一)动态分配内存1...

  • C-学生管理系统

    目的 通过完成一个简单的学生管理系统,达到掌握文件操作,动态分配内存,单链表的作用 技术 文件操作,动态分配内存,...

  • 动态分配内存

    动态分配内存初始化的方式 初始化列表(list initialization)对于数组、类、结构体都是试用的。

  • 智能指针

    智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止内存泄漏。动态分配的资源交给一个...

  • 第11章:动态内存分配

    为什么使用动态内存分配 malloc和free calloc和realloc 使用动态分配的内存 常见的动态内存错...

  • jvm2:Java内存溢出

    内存泄露和内存溢出的区别 内存溢出通俗理解就是内存不够了,不能分配足够大的内存。内存泄露就是程序中已动态分配的堆内...

  • iOS | 面试 - 内存管理

    iOS | 面试知识整理 - 内存管理(五) 1.什么是内存泄漏? 内存泄漏指动态分配内存的对象在使用完后没有被...

网友评论

    本文标题:动态分配内存的危险(浅)

    本文链接:https://www.haomeiwen.com/subject/ktfibttx.html