<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MicroBlaze:malloc 函數(shù)動態(tài)分配內(nèi)存溢出

          MicroBlaze:malloc 函數(shù)動態(tài)分配內(nèi)存溢出

          作者: 時間:2017-10-13 來源:網(wǎng)絡(luò) 收藏

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

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

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

          如果調(diào)用malloc(int size)函數(shù)的時候出現(xiàn),malloc函數(shù)返回NULL,這就說明內(nèi)存分配失敗,原因是:

          申請的內(nèi)存的大小可能超過了內(nèi)存本身的大小

          申請內(nèi)存的大小超過了heap_size的大小

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

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

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

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



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();