C语言与JAVA内存管理_C语言内存管理
本章將介紹C語(yǔ)言動(dòng)態(tài)內(nèi)存管理. C語(yǔ)言編程語(yǔ)言提供了多種功能的內(nèi)存分配和管理。這些函數(shù)可以在頭文件中找到。
S.N.
函數(shù)與說(shuō)明
1
void *calloc(int num, int size);
此函數(shù)分配num元素其中每一個(gè)字節(jié)大小為(size)的數(shù)組
2
void free(void *address);
此函數(shù)釋放由地址指定的存儲(chǔ)器塊的塊
3
void *malloc(int num);
這個(gè)函數(shù)分配num個(gè)字節(jié)數(shù)組,并把它們初始化
4
void *realloc(void *address, int newsize);
此函數(shù)重新分配內(nèi)存達(dá)其擴(kuò)展newsize
分配內(nèi)存動(dòng)態(tài)
當(dāng)編寫(xiě)程序,如果知道一個(gè)數(shù)組的大小,那么它是很簡(jiǎn)單的,可以把它定義為一個(gè)數(shù)組。例如存儲(chǔ)任何人的名字,它可以最多100個(gè)字符,這樣就可以定義的東西如下:
charname[100];
但是,現(xiàn)在讓我們考慮一個(gè)情況,如果不知道需要存儲(chǔ)文本的長(zhǎng)度,比如想存儲(chǔ)有關(guān)的話題的詳細(xì)說(shuō)明。在這里,我們需要定義一個(gè)指針字符沒(méi)有定義的基礎(chǔ)上規(guī)定,如在下面的例子中,我們可以分配的內(nèi)存是多少內(nèi)存要求更長(zhǎng)字段:
#include#include#includeintmain(){charname[100];char*description;strcpy(name,"Zara Ali");/* allocate memory dynamically */description=malloc(200*sizeof(char));if(description==NULL){fprintf(stderr,"Error - unable to allocate required memory
");}else{strcpy(description,"Zara ali a DPS student in class 10th");}printf("Name = %s
",name);printf("Description: %s
",description);}
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果。
Name = Zara Ali
Description: Zara ali a DPS student in class 10th
同樣的程序可以通過(guò)calloc()只需要用calloc代替malloc完成如下:
calloc(200,sizeof(char));
所以完全的控制,可以通過(guò)任何大小的值,而分配的內(nèi)存在不同的地方,一旦定義的大小之后就不能改變數(shù)組。
調(diào)整大小和釋放內(nèi)存
當(dāng)程序執(zhí)行出來(lái)后,操作系統(tǒng)會(huì)自動(dòng)釋放所有程序,但作為一個(gè)很好的做法,當(dāng)不在需要的內(nèi)存分配的內(nèi)存了,那么應(yīng)該通過(guò)調(diào)用free()函數(shù)釋放內(nèi)存。
另外,也可以增加或通過(guò)調(diào)用realloc()函數(shù)減少已分配的內(nèi)存塊的大小。讓我們?cè)僖淮螜z查上面的程序,并利用realloc()和free()函數(shù):
#include#include#includeintmain(){charname[100];char*description;strcpy(name,"Zara Ali");/* allocate memory dynamically */description=malloc(30*sizeof(char));if(description==NULL){fprintf(stderr,"Error - unable to allocate required memory
");}else{strcpy(description,"Zara ali a DPS student.");}/* suppose you want to store bigger description */description=realloc(description,100*sizeof(char));if(description==NULL){fprintf(stderr,"Error - unable to allocate required memory
");}else{strcat(description,"She is in class 10th");}printf("Name = %s
",name);printf("Description: %s
",description);/* release memory using free() function */free(description);}
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果。
Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th
可以試試上面的例子不重新分配額外的內(nèi)存,那么strcat()函數(shù)將因缺乏描述可用內(nèi)存給出一個(gè)錯(cuò)誤。
¥ 我要打賞
糾錯(cuò)/補(bǔ)充
收藏
上一篇:
加QQ群啦,易百教程官方技術(shù)學(xué)習(xí)群
注意:建議每個(gè)人選自己的技術(shù)方向加群,同一個(gè)QQ最多限加 3 個(gè)群。
總結(jié)
以上是生活随笔為你收集整理的C语言与JAVA内存管理_C语言内存管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS 14.8正式版更新内容及升级方法
- 下一篇: java 接口的观察者模式_java观察