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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 淺談malloc與 kmalloc、cmalloc、realloc、new 的區(qū)別

          淺談malloc與 kmalloc、cmalloc、realloc、new 的區(qū)別

          作者: 時間:2012-07-23 來源:網(wǎng)絡(luò) 收藏

          相關(guān)函數(shù)原型:

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

          1. Malloc

          作 用: Malloc用于動態(tài)申請存儲空間,它不是關(guān)鍵字,而是一個申請內(nèi)存的函數(shù)

          用 法:

          Malloc 返回一塊內(nèi)存地址的指針,否則會返回空指針null,這里要注意的是,當(dāng)內(nèi)存不再使用的時候,用free()函數(shù)進(jìn)行對內(nèi)存的釋放。

          2.calloc

          作 用:calloc()函數(shù)有兩個參數(shù),分別為元素的數(shù)目和每個元素的大小,這兩個參數(shù)的乘積就是要分配的內(nèi)存空間的大小。

          例 子:

          3.

          作 用:重新分配內(nèi)存空間。

          例 子:

          4.總結(jié):

          : 動態(tài)分配size字節(jié)空間,返回它的指針。(此函數(shù)不能初始化內(nèi)存空間)

          calloc:動態(tài)分配n個連續(xù)的size字節(jié)空間,返回第一個指針。它有兩個參數(shù),分別為參數(shù)的數(shù)目,和每個參數(shù)的大小,那么這兩個參數(shù)的乘積就是這個分配空間的大小。(此函數(shù)可以初始化內(nèi)存空間)

          :將指針指向的內(nèi)存空間擴(kuò)展成n個,把它放在最后解釋因為偶不建議使用,確實要用也要考慮多種情況。

          free:釋放上述兩函數(shù)分配的空間;

          1 、 建立的是一個對象, 分配的是一塊內(nèi)存。

          2、malloc申請的是heap區(qū)的內(nèi)存空間,返回的是指針。 建立的對象你可以把它當(dāng)成一個普通的對象,用成員函數(shù)訪問,不要直接訪問它的地址空間。(注意用delete釋放空間)。

          3、malloc/free是C/C++中的方法(函數(shù)),new/delete是C++中的操作符。

          4、使用free之前要判斷,使其free的指針是!NULL的,使用delete則無須判斷。

          5、free掉的內(nèi)存是該指針指向的一段內(nèi)存空間,里面應(yīng)該是空的。而delete掉的內(nèi)存是里面確實存有數(shù)據(jù)或者對象的。

          最后要注意的是malloc和free 、new和delete成對使用,以免不必要的麻煩。

          c++相關(guān)文章:c++教程




          評論


          相關(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); })();