免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
malloc
C語(yǔ)言malloc的使用淺談   

C語(yǔ)言malloc的使用淺談

參考文獻(xiàn):C_Free API文檔

在c語(yǔ)言的編程中常常要對(duì)內(nèi)存操作,而這對(duì)不少人來(lái)說(shuō)是個(gè)不簡(jiǎn)單的問(wèn)題。

最近在做作業(yè)的過(guò)程中常常看到在用到存儲(chǔ)結(jié)構(gòu)的地方常常有malloc的身影,我就在想到底什么時(shí)候什么地方該用到malloc 經(jīng)過(guò)在百度和狗狗的一番搜搜之后在下的愚見(jiàn)總結(jié)如下:

一、使用malloc的情況

首先說(shuō)明一下,由malloc動(dòng)態(tài)申請(qǐng)的內(nèi)存空間是堆式的內(nèi)存空間。

而靜態(tài)的內(nèi)存的空間是棧式的。有關(guān)堆棧的知識(shí)請(qǐng)參考其他相關(guān)資料。

1.       大容量?jī)?nèi)存需求

網(wǎng)上說(shuō)當(dāng)我們需要的內(nèi)存空間超過(guò)0.5兆的時(shí)候最好使用動(dòng)態(tài)內(nèi)存,也就是利用malloc來(lái)申請(qǐng)內(nèi)存空間??梢赃@么認(rèn)為,如果內(nèi)存過(guò)大,就會(huì)不易管理,而malloc可以說(shuō)事一個(gè)專(zhuān)業(yè)的內(nèi)存管理者,但靜態(tài)的則可以當(dāng)成是一個(gè)業(yè)余的。畢竟術(shù)業(yè)有專(zhuān)攻。

2.       不確定內(nèi)存需求

當(dāng)我們需要的內(nèi)存空間大小連我們自己也不知道的時(shí)候。為了不使內(nèi)存空間的浪費(fèi)。我們需要用到malloc函數(shù)??梢赃@樣理解如果說(shuō)靜態(tài)的內(nèi)存空間是一個(gè)鐵盒子的話那么動(dòng)態(tài)內(nèi)存空間就可以看作是可伸縮的袋子,它的容量可以根據(jù)你所裝物體的體積不同而定制。當(dāng)然我們也可以利用靜態(tài)內(nèi)存,這樣會(huì)有兩種可能出現(xiàn)的結(jié)果,一是你所申請(qǐng)的空間不夠用,程序異常。二是申請(qǐng)的內(nèi)存過(guò)大,浪費(fèi)。

我們來(lái)看在鏈表中情況,如果我們定義好了一個(gè)長(zhǎng)度為十的鏈表之后想要在某個(gè)位置插入或刪除一個(gè)節(jié)點(diǎn)。這個(gè)時(shí)候我們數(shù)組靜態(tài)的話肯定會(huì)在數(shù)組數(shù)值的移動(dòng)上花費(fèi)有很大的開(kāi)銷(xiāo)。而利用malloc動(dòng)態(tài)存儲(chǔ)時(shí)就不會(huì)出現(xiàn)這樣的情況。由于動(dòng)態(tài)申請(qǐng)到存儲(chǔ)空間不一定是連續(xù)的存儲(chǔ)空間。所以當(dāng)我們使用malloc申請(qǐng)空間時(shí)。計(jì)算機(jī)會(huì)在‘任意’可以申請(qǐng)到空間的地方給我們開(kāi)辟需要的空間來(lái)供我們使用。新申請(qǐng)的空間與原來(lái)的空間只有通過(guò)指針想連接的關(guān)系物理上并一定有前后的關(guān)系。所以就不需要對(duì)原來(lái)的數(shù)據(jù)做移動(dòng)操作。這樣的系統(tǒng)開(kāi)銷(xiāo)就相對(duì)小了很多。相應(yīng)的free的時(shí)候也是對(duì)“不相關(guān)”的空間進(jìn)行操作。所以也不用對(duì)數(shù)據(jù)做移動(dòng)操作。

3.       備注

二、如何科學(xué)使用malloc

1.       申請(qǐng)

calloc

語(yǔ)法:

 

  #include <stdlib.h>

  void *calloc( size_t num, size_t size );

功能: 函數(shù)返回一個(gè)指向num 數(shù)組空間,每一數(shù)組元素的大小為size。如果錯(cuò)誤發(fā)生返回NULL。

 


      malloc

 

  #include <stdlib.h>

  void *malloc( size_t size );

功能: 函數(shù)指向一個(gè)大小為size的空間,如果錯(cuò)誤發(fā)生返回NULL。 存儲(chǔ)空間的指針必須為堆,不能是棧。這樣以便以后用free函數(shù)釋放空間。例如:

    typedef struct data_type {

      int age;

      char name[20];

    } data;

   

    data *bob;

    bob = (data*) malloc( sizeof(data) );

    if( bob != NULL ) {

      bob->age = 22;

      strcpy( bob->name, "Robert" );

      printf( "%s is %d years old\n", bob->name, bob->age );

    }

free( bob );

 

realloc

語(yǔ)法:

 

  #include <stdlib.h>

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

功能: 函數(shù)將ptr 對(duì)象的儲(chǔ)存空間改變?yōu)榻o定的大小size。 參數(shù)size可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空間的指針,如果錯(cuò)誤發(fā)生返回NULL。

2.       釋放

free

語(yǔ)法:

 

  #include <stdlib.h>

  void free( void *ptr );

功能: 函數(shù)釋放指針ptr指向的空間,以供以后使用。指針ptr 必須由先前對(duì)malloc(), calloc(), realloc()的調(diào)用返回。例如:

    typedef struct data_type {

      int age;

      char name[20];

    } data;

   

      data *willy;

    willy = (data*) malloc( sizeof(willy) );

    ...

free( willy );

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
malloc與free函數(shù)原型
詳解動(dòng)態(tài)內(nèi)存分配函數(shù)malloc、calloc、realloc、free的區(qū)別
C中內(nèi)存建立與釋放的函數(shù)
動(dòng)態(tài)內(nèi)存分配函數(shù)解析
c與c++分別是怎樣動(dòng)態(tài)分配和釋放內(nèi)存的,有什么區(qū)別?(轉(zhuǎn)) demo大全
malloc()與calloc區(qū)別
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服