C语言与JAVA内存管理_C语言内存管理
本章將介紹C語言動態內存管理. C語言編程語言提供了多種功能的內存分配和管理。這些函數可以在頭文件中找到。
S.N.
函數與說明
1
void *calloc(int num, int size);
此函數分配num元素其中每一個字節大小為(size)的數組
2
void free(void *address);
此函數釋放由地址指定的存儲器塊的塊
3
void *malloc(int num);
這個函數分配num個字節數組,并把它們初始化
4
void *realloc(void *address, int newsize);
此函數重新分配內存達其擴展newsize
分配內存動態
當編寫程序,如果知道一個數組的大小,那么它是很簡單的,可以把它定義為一個數組。例如存儲任何人的名字,它可以最多100個字符,這樣就可以定義的東西如下:
charname[100];
但是,現在讓我們考慮一個情況,如果不知道需要存儲文本的長度,比如想存儲有關的話題的詳細說明。在這里,我們需要定義一個指針字符沒有定義的基礎上規定,如在下面的例子中,我們可以分配的內存是多少內存要求更長字段:
#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);}
當上述代碼被編譯和執行時,它產生了以下結果。
Name = Zara Ali
Description: Zara ali a DPS student in class 10th
同樣的程序可以通過calloc()只需要用calloc代替malloc完成如下:
calloc(200,sizeof(char));
所以完全的控制,可以通過任何大小的值,而分配的內存在不同的地方,一旦定義的大小之后就不能改變數組。
調整大小和釋放內存
當程序執行出來后,操作系統會自動釋放所有程序,但作為一個很好的做法,當不在需要的內存分配的內存了,那么應該通過調用free()函數釋放內存。
另外,也可以增加或通過調用realloc()函數減少已分配的內存塊的大小。讓我們再一次檢查上面的程序,并利用realloc()和free()函數:
#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);}
當上述代碼被編譯和執行時,它產生了以下結果。
Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th
可以試試上面的例子不重新分配額外的內存,那么strcat()函數將因缺乏描述可用內存給出一個錯誤。
¥ 我要打賞
糾錯/補充
收藏
上一篇:
加QQ群啦,易百教程官方技術學習群
注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。
總結
以上是生活随笔為你收集整理的C语言与JAVA内存管理_C语言内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 14.8正式版更新内容及升级方法
- 下一篇: java 接口的观察者模式_java观察