0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

不停的malloc程序会异常吗

学益得智能硬件 来源:学益得智能硬件 2025-01-14 09:17 次阅读

把 malloc 放在死循环里面,会是什么样的现象?

比如这样的代码,每次使用 malloc 申请 1M 大小的内存,其他什么操作也不做。

理论上来说,堆内存是有限的,如果不停的申请,迟早内存会被用完,程序应该会异常退出。

于是我找了个环境,把程序运行起来试下。

先用虚拟机,跑的一个 32 位的红帽系统,程序运行起来,好像只是一个普通的死循环,半天也没见他退出,而且程序也不卡顿。

看下进程的内存使用情况,数值一直都没变。

应该可以得出结论,虽然不停的申请,但是因为内存没有使用,所以系统并没有真正的分配。

修改下代码,申请了内存后,使用 memset 把内存初始化一下,再次运行,不一会虚拟机卡顿,直到程序被杀死。

换个环境,这次使用 64 位的Ubuntu,同样的代码,没有初始化内存,运行程序,很快进程就被杀死。

运行的时候看了下内存的使用情况,确实是在快速的增长。

所以在这个环境里面,即使申请的堆内存没有使用,系统也确实给分配了。

同样是 malloc 函数,不同的操作系统,内存管理的策略也不太一样。

#include 
#include 


int main()
{
    char *p = NULL;


    while (1) 
    {   
        p = (char *)malloc(1);


        *p = 1;
    }   


    return 0;
}

最后给大家看个笔试题,也是关于 malloc 函数,运行程序,应该是个怎样的现象?如果你能看出来,欢迎在评论区交流。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    117

    文章

    3795

    浏览量

    81313
  • 函数
    +关注

    关注

    3

    文章

    4345

    浏览量

    62893
  • malloc
    +关注

    关注

    0

    文章

    53

    浏览量

    75

原文标题:不停的malloc,程序会不会异常

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    ADS1230输出数据不定时出现一个异常数据,怎么回事?

    我们现在在使用ADS1230芯片。在使用过程中一直没什么问题。最新一批产品出现了,输出数据不定时出现一个异常数据的问题。换了原来的ADS1230芯片后正常。 我们抓波形发现,这些异常数据出现后
    发表于 11-26 07:25

    TPA3220功放的OTW_CLIP管脚异常拉低,为什么?

    当功放的功率达到120W时,TPA3220功放的OTW_CLIP管脚异常拉低。 正常情况下FAULT和OTW_CLIP管脚均为高电平,如图为FAULT和OTW_CLIP管脚的真值表图, 图为异常时抓取的波形:
    发表于 09-29 09:04

    stm32单片机烧录程序擦除原来的程序

    在STM32单片机烧录程序的过程中, 通常情况下擦除原来的程序 ,并将新程序写入单片机的闪存(Flash)中。这一过程是通过烧录工具(如ST-Link、J-Link等)实现的,它们负
    的头像 发表于 09-02 09:42 2453次阅读

    plc突然断电导致什么异常

    PLC(Programmable Logic Controller,可编程逻辑控制器)是一种广泛应用于工业自动化领域的控制器。当PLC突然断电时,可能导致一些异常情况,这些异常情况可能
    的头像 发表于 07-25 10:11 1634次阅读

    普通普普通双电源切换开关ATS无法保证敏感负载晃电时不停机该怎么办?

    GTS系列双电源高速切换开关快速双电源采用常用电源、备用电源、输出电压电流动态监控技术(幅值、相位、频率),用于系统综合判断,能主动快速构建引起电压异常的数学模型,起动快速安全切换逻辑,确保电源异常
    的头像 发表于 07-19 11:17 453次阅读

    可以用os_malloc() 分配多少内存?有哪些限制?

    我可以用 os_malloc() 分配多少内存?有哪些限制?
    发表于 07-15 06:32

    调用os_malloc异常重启是什么原因导致的?

    )); return node; } 明明还有足够内存空间的情况下,为何在os_malloc分配内存里异常重启? 下面是我的重启时候的log:recv json{\"datetime\"
    发表于 07-12 07:47

    使用system_show_malloc()检查内存泄漏遇到异常怎么解决?

    我想使用system_show_malloc()检查内存泄漏,但是当我调用该函数时,我得到了致命的异常: 致命异常 28 (LoadProhibitedCause): epc1
    发表于 07-10 06:32

    ESP32设置中文蓝牙设备名称异常显示乱码,原因是什么?

    ESP32 设置中文蓝牙设备名称异常显示乱码,原因是什么? 这是因为此时编辑器的中文编码格式不是 UTF-8,需要把编辑器的编码格式改成 UTF-8。
    发表于 06-13 06:21

    esp32s2FN4R2启用内置的2M PSRAM后,不断重启怎么解决?

    如题,开启外部PSRAM,检测方式不论是auto-detect还是指定EspPsram32,编译后都会不停重启 试过改变其它选项,比如内存分配方式,不管是malloc(),还是
    发表于 06-11 08:56

    malloc和calloc功能来实现DAQ,在调试模式下调用calloc和malloc函数时似乎卡住了,为什么?

    我正在使用 malloc 和 calloc 功能来实现 DAQ。 我使用的是 TLE9893 系列芯片。 代码编译良好,但在调试模式下调用 calloc 和 malloc 函数时似乎卡住了。 我尝试
    发表于 05-27 08:29

    下载程序后直接运行,SystemCoreClock异常怎么解决?

    下载程序后直接运行,SystemCoreClock异常
    发表于 04-15 08:14

    可以在RTOS的任何位置使用malloc申请内存了吗?

    今天看了CubeIDE 1.7.0的release note ,里面写的一条新特性是:Thread-safe malloc solution 这是否意味着我可以在RTOS的任何位置使用malloc申请内存了?
    发表于 04-03 07:23

    Stm32H7 spi带来更大的adc噪声,导致小信号异常值的原因?

    [Stm32H7]spi带来更大的adc噪声,导致小信号异常
    发表于 03-25 06:10

    STM32H743如何让malloc自动分配到外部RAM中呢?

    本人试过在进入main之前修改启动文件,增加SDRAM的初始化,并且将栈空间指定在内部防止初始化错误,程序还是死在Hardfault_Handler。还有什么办法可以将malloc自动分配到外部RAM中呢
    发表于 03-13 07:14