[英]What is the use of malloc? Why not just… not use it?
我正在學習有關學習C的本教程 ,內容如下:
假設我們要動態分配人員結構。 該人的定義如下:
typedef struct { char * name; char age; } person;
要在myperson參數中分配一個新人,我們使用以下語法:
person * myperson = malloc(sizeof(person));
他們為什么這樣做呢? malloc
帶給您什么好處?
以下代碼可以編譯,並且看起來可以正常運行:
typedef struct {
char * name;
char age;
} person;
person p;
p.name = "Henry";
p.age = 9;
printf("%s is %d", p.name, p.age);
我很困惑為什么要使用malloc
。
malloc
至少在以下三種情況下使用:
char
字符串。 但這並不是編程所必需的。
當然,沒有它,將很難實現許多事情,但是,這並不是絕對必要的。 實際上,某些特殊應用的編碼樣式(例如航空電子設備的DO-178B)實際上禁止使用它。
Malloc提供了靈活性,可以動態分配內存並在需要時使用它,並在不需要時釋放它。 在上述情況下,分配給人p的內存將保留到堆棧末尾。 您可能在當前示例中找不到它的用途。 但是在許多情況下,動態分配內存是有意義的。
提供的示例並沒有真正顯示出“ malloc”的全部功能,就這么簡單。
考慮一個您不知道最大金額的應用程序,比方說一個銀行帳戶...(在此示例中,金錢只是整數)
現在,您是一名程序員,因此余額可以按16位數字存儲在兩個帳戶中:
unsigned int * array = malloc(2 * sizeof(unsigned int)); //This allows the array
//to have two indexes.
現在,假設我們現在需要添加另一個帳戶...
如果我們還不聰明並使用過malloc,那我們就被塞滿了。
但是,我們現在可以說:
realloc(3 * sizeof(unsigned int));
並添加更多的銀行帳戶:)
另一種看待這種情況的方法是, why use a pointer to my struct rather than just the struct
,因為當您想到malloc()
,您會想到指針。 使用指針以及malloc()
好處之一是調用函數時的開銷。 當您的數據結構變得更加復雜時,將它們作為參數傳遞給函數時,它們的開銷將會增加。 解決此問題的一種方法是只將指針傳遞給您的結構,然后在函數中取消引用該結構。
void printfStruct(struct myStruct)
{
printf("%s", myStruct.name);
// no pointer passed, overhead created on larger data structures
}
void printfStruct(struct *myStruct)
{
printf("%s", myStruct->name);
// pointer passed, then dereferenced. Decreased overhead on larger data structures.
}
Malloc用於在運行時分配內存。 如果不確定確切的人數,則可以在運行時確定人數,並可以為其分配合適的內存。
malloc連續分配內存...即,您可以執行指針算術
當您想釋放內存時,您可以給出free(),這將釋放整個內存塊,而不管大小太大或太小。
還要注意,malloc沒有任何默認值,因此默認情況下它包含垃圾值...如果要將默認值設置為零,請使用calloc而不是malloc。
如果沒有連續的可用空間,則malloc返回null值,因此在這種情況下無法分配內存
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.