• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > MicroBlaze:malloc 函數動態分配內存溢出

    MicroBlaze:malloc 函數動態分配內存溢出

    作者: 時間:2017-10-13 來源:網絡 收藏

    首先說明一點, C函數庫支持標準的內存管理函數,如malloc(),calloc(), free(),這些標準的C函數庫定義在libc.a中。動態內存分配從內存的程序的堆(heap)中提供。所以堆的大小會直接影響調用malloc內存分配的大小。而堆的大小(heap size)是不能在運行的時候增加,這樣需要在程序編譯的時候確定合適的堆的大小,在大小可以EDK下generate linker script的時候,或者直接修改*.ld文件,例如:

    本文引用地址:http://www.czjhyjcfj.com/article/201710/365663.htm

    _STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x1000;
    _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x1000;

    如果調用malloc(int size)函數的時候出現,malloc函數返回NULL,這就說明內存分配失敗,原因是:

    申請的內存的大小可能超過了內存本身的大小

    申請內存的大小超過了heap_size的大小

    針對以上兩個原因,可以這樣做修改heap_size 和增加實際的物理內存。

    這里要提醒一點:每次調用malloc,必須檢查一下返回值,以保證實際內存分配的請求。

    在實踐中,本人通過malloc申請一塊近乎3MB內存空間用于存儲圖像數據,但是因為堆設置得太小了,返回值一直為NULL,內存分配失敗。

    調用malloc代碼
    void *zalloc(unsigned long size)
    {
    void *ret = malloc(size);
    if (ret) memset(ret, 0, size);
    return ret;
    }



    關鍵詞: 函數動態 MicroBlaze

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 乌审旗| 安新县| 新津县| 兴海县| 合川市| 确山县| 清水河县| 凤翔县| 鄄城县| 广安市| 孟州市| 景东| 朝阳市| 隆尧县| 台中县| 屏东县| 中方县| 凤阳县| 松桃| 深圳市| 正定县| 凤台县| 略阳县| 江孜县| 盐津县| 石楼县| 灌云县| 辽中县| 沂源县| 丰城市| 沧源| 尼木县| 库尔勒市| 武功县| 咸丰县| 吴旗县| 瓦房店市| 宁南县| 宜兰市| 长兴县| 南京市|