堆内存

堆内存管理:
    C语言中没有管理堆内存的语句,只能使用标准库中的函数
        #include <stdlib.c>
        void *malloc(size_t size);
        功能:从堆内存申请size个字节大小的内存块,里面的内容不确定
        返回值:内存块的首地址
        【注】:void*在C++编译中不能自动转换成其他类型的指针,如果想让代码在C++中兼容要强制类型转换
            int* p = (int*)malloc(4);

        free(void *ptr)
        功能:释放一块内存
        ptr:内存块的首地址
        【注】:free可以释放空指针,但是别的内存块不能连续释放

 

常见面试题:
        1、堆内存和栈内存的区别
            定义 大小 使用 安全性 优缺点

栈内存、堆内存都是进程的一个内存段栈内存存放的是局部变量,由操作系统自动分配和释放,

        2、堆内存越界的后果
            超过了33页产生段错误
            破坏了malloc的维护信息,再次使用malloc/free会出错
            脏数据
        3、什么是内存泄漏,如何定位内存泄漏
            由于粗心、业务逻辑出错导致使用完毕的内存没有释放,当再次需要时只能重新申请,又没释放,日积月累能使用的内存就                越来越少,系统就会越来越慢甚至奔溃
                1、Windows查看任务管理器,Linux使用ps -aux,或者通过GDB查看内存使用情况
                2、使用代码工具,分析代码(mtrace)
                3、封装malloc、free,记录申请、释放内存的过程到日志中
        4、什么是内存碎片,如何减少内存碎片
            已经释放但也无法再次使用的内存块就叫内存碎片,它是由于申请释放的时间、大小不协调导致的
                1、尽量使用栈内存
                2、不要频繁申请释放内存
                3、尽量申请大内存,自己管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值