堆内存

堆内存
    程序员手动管理,足够大,使用麻烦。
    为什么使用堆内存:
        1.复杂数据量增多。
        2.其他内存段申请释放不受控制,堆内存可以控制。
    malloc的内存管理机制:
        1.当首次向malloc申请内存时,malloc会向操作系统申请堆内存,操作系统会直接分配33页(1页=4096字节)内存给malloc管理,但不意味着可以越界访问,因为malloc可能会把内存分配给“其他人”使用,会产生脏数据。
        2.每个内存块之间一定会有一些空隙(4~12字节),一部分空隙是为了内存对齐,其中一定有4字节用于记录malloc的维护信息,如果维护信息遭到破坏会影响下一次的free调用。

内存泄漏:
    内存无法使用,也无法被释放,当再次需要时只能重新申请,然后又重复以上过程,日积月累后会导致系统中可用的内存越来越少。
    程序一旦结束,属于它的所有资源都会被操作系统回收。
    如何尽量避免内存泄漏:
        谁申请的谁释放,谁知道该释放谁释放。
    如何判断定位内存泄漏
        1.查看内存的使用情况
            windows 任务管理器
            Linux 命令 ps -aux
        2.代码分析工具mtrace,检查malloc、free的使用情况
        3.封装新的malloc和free函数,记录调用信息到日志中

内存碎片:
    已经被释放但是又无法继续使用的内存叫做内存碎片,是由于申请和释放的时间不协调导致的,内存碎片无法避免只能尽量减少。
    如何减少内存碎片:
        1.尽量使用栈内存,占内存不会产生内存碎片
        2.不要频繁地申请和释放内存
        3.尽量申请大块内存自己管理
posted @ 2023-07-05 19:33  ycddqr  阅读(38)  评论(0)    收藏  举报