動(dòng)態(tài)內(nèi)存分配

1. malloc和free

malloc和free,分別用于執(zhí)行動(dòng)態(tài)內(nèi)存分配和釋放。
這些函數(shù)維護(hù)一個(gè)可用內(nèi)存池,當(dāng)一個(gè)程序另外需要一些內(nèi)存時(shí),他就調(diào)用malloc函數(shù),malloc從內(nèi)存池中提取一塊合適的內(nèi)存,并向該程序返回一個(gè)指向這塊內(nèi)存的指針。這塊內(nèi)存并沒(méi)有以任何方式進(jìn)行初始化。如果對(duì)這塊內(nèi)存進(jìn)行初始化非常重要,你要么自己動(dòng)手進(jìn)行初始化,要么使用calloc函數(shù)。

函數(shù)原型:

      #include <stdlib.h>
       void *malloc(size_t size);
       void free(void *ptr);

malloc的參數(shù)就是需要分配的字節(jié)數(shù),如果內(nèi)存池中的可用內(nèi)存可以滿足這個(gè)需求,malloc就返回一個(gè)指向被分配的內(nèi)存塊起始位置的指針。
malloc分配的一塊連續(xù)的內(nèi)存。如果分配失敗則函數(shù)返回NULL。

2.calloc和realloc

函數(shù)原型:

       void *calloc(size_t nmemb, size_t size);
       void *realloc(void *ptr, size_t size);

calloc也用于內(nèi)存分配。
malloc和calloc之間主要區(qū)別是后者返回指向內(nèi)存指針之前把它初始化為0。

calloc和malloc之間另一個(gè)較小的區(qū)別是他們請(qǐng)求內(nèi)存數(shù)量的方式不同。calloc的參數(shù)包括所需元素 的數(shù)量和每個(gè)元素的字節(jié)數(shù)。根據(jù)這些值,它能夠計(jì)算出總共需要分配的內(nèi)存數(shù)

realloc函數(shù)用于修改一個(gè)原先已經(jīng)分配的內(nèi)存塊大小。使用這個(gè)函數(shù),你可以使一塊內(nèi)存擴(kuò)大或縮小。如果它用于擴(kuò)大一個(gè)內(nèi)存塊,那么這塊內(nèi)存原先的內(nèi)容依然保留,新增加的內(nèi)存添加到原先內(nèi)存塊的后面,新內(nèi)存并未以任何方式進(jìn)行初始化。如果它用于縮小一個(gè)內(nèi)存塊,該內(nèi)存塊尾部的部分便被拿掉,剩余部分內(nèi)存的原先內(nèi)存依然保留。如果原先的內(nèi)存塊無(wú)法改變大小,realloc將分配一塊正確大小的內(nèi)存,并把原先內(nèi)存的內(nèi)存復(fù)制到新塊上,因此,在使用realloc之后,你就不能再使用指向舊內(nèi)存的指針,而是應(yīng)該改用realloc所返回的新指針。如果realloc函數(shù)的第一個(gè)參數(shù)是NULL,那么它等同于malloc

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 邏輯上的分區(qū) 棧區(qū) 堆區(qū) 靜態(tài)區(qū) 常量區(qū) 代碼區(qū) 代碼區(qū),常量區(qū),靜態(tài)區(qū),堆區(qū),棧區(qū)這個(gè)排列順序按照地址由小到大排...
    MathCat閱讀 692評(píng)論 1 0
  • 1. 動(dòng)態(tài)內(nèi)存分配的意義 (1)C語(yǔ)言中的一切操作都是基于內(nèi)存的(2) 變量和數(shù)組都是內(nèi)存的別名 內(nèi)存分配由編譯器...
    編程半島閱讀 673評(píng)論 0 0
  • 為什么使用動(dòng)態(tài)內(nèi)存分配 當(dāng)你聲明數(shù)組時(shí),你必須使用一個(gè)編譯時(shí)常量來(lái)指定數(shù)組的長(zhǎng)度。但是,數(shù)組的長(zhǎng)度常常在運(yùn)行時(shí)才能...
    d9fc24a0c9a9閱讀 2,451評(píng)論 0 0
  • 1. malloc()函數(shù) 1.1 malloc的全稱是memory allocation,中文叫動(dòng)態(tài)內(nèi)存分配。 ...
    Pitfalls閱讀 2,133評(píng)論 0 5
  • C語(yǔ)言中內(nèi)存分配 在任何程序設(shè)計(jì)環(huán)境及語(yǔ)言中,內(nèi)存管理都十分重要。在目前的計(jì)算機(jī)系統(tǒng)或嵌入式系統(tǒng)中,內(nèi)存資源仍然是...
    一生信仰閱讀 1,300評(píng)論 0 2

友情鏈接更多精彩內(nèi)容