首頁  >  文章  >  後端開發  >  動態記憶體分配(Dynamic Memory Allocation)是C語言中的一種機制。它允許程式在運行時動態地分配和釋放記憶體空間。透過使用動態記憶體分配,程式可以根據需要動態地分配內存,而不需要在編譯時確定記憶體大小。這使得程式能夠更靈活地管理內存,並有效地利用可用的系統資源

動態記憶體分配(Dynamic Memory Allocation)是C語言中的一種機制。它允許程式在運行時動態地分配和釋放記憶體空間。透過使用動態記憶體分配,程式可以根據需要動態地分配內存,而不需要在編譯時確定記憶體大小。這使得程式能夠更靈活地管理內存,並有效地利用可用的系統資源

WBOY
WBOY轉載
2023-09-07 11:49:021360瀏覽

动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源

這裡我們將了解什麼是 C 語言中的動態記憶體分配。 C 程式語言提供了多個用於記憶體分配和管理的函數。這些函數可以在 頭檔中找到。以下函數用於記憶體分配。

函數 描述
void *calloc(int num, int size ); 這個函數分配一個由num 個元素組成的數組,每個元素的大小以位元組為單位。
void free(void *address); 此函數釋放位址指定的一塊記憶體區塊。
void *malloc(int num); 此函數指派一個陣列num 位元組並保持其未初始化。
void *realloc(void *address, int newsize); 此函數重新-分配內存,並將其擴展到newsize

動態分配記憶體

在程式設計時,如果您知道陣列的大小,那麼就很容易將其定義為陣列。例如,要儲存任何人的姓名,最多可以包含100 個字符,因此您可以定義如下-

char name[100];

但是現在讓我們考慮一種情況,您不知道需要儲存的文字的長度,例如,您想要儲存有關某個主題的詳細描述。這裡我們需要定義一個指向字元的指針,而不定義需要多少內存,然後根據需要,我們可以分配內存,如下例所示-

示例代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory</p><p>");
   } else {
      strcpy( description, "Adam a DPS student in class 10th");
   }
   printf("Name = %s</p><p>", name );
   printf("Description: %s</p><p>", description );
}

輸出

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

可以使用calloc() 編寫相同的程式;唯一的問題是您需要將malloc 替換為calloc,如下所示-

calloc(200, sizeof(char));

因此,您擁有完全的控制權,可以在分配記憶體時傳遞任何大小值,這與數組不同,數組一旦定義了大小,就無法更改它。

調整記憶體位置的大小

當你的程式出來後,作業系統會自動釋放你的程式分配的所有內存,但作為一個好習慣,當你不再需要記憶體時,你應該透過呼叫函數free() 來釋放該記憶體。

或者,您可以透過呼叫函數 realloc() 來增加或減少已分配記憶體區塊的大小。讓我們再次檢查上面的程式並使用realloc() 和free() 函數-

範例程式碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory</p><p>");
   } else {
      strcpy( description, "Adam 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</p><p>");
   } else {
      strcat( description, "He is in class 10th");
   }
   printf("Name = %s</p><p>", name );
   printf("Description: %s</p><p>", description );
   /* release memory using free() function */
   free(description);
}

輸出

Name = Adam
Description: Adam a DPS student.He is in class 10th

您可以嘗試上面的範例,而無需重新分配額外的內存,strcat()函數將由於描述中缺少可用內存而給出錯誤。

以上是動態記憶體分配(Dynamic Memory Allocation)是C語言中的一種機制。它允許程式在運行時動態地分配和釋放記憶體空間。透過使用動態記憶體分配,程式可以根據需要動態地分配內存,而不需要在編譯時確定記憶體大小。這使得程式能夠更靈活地管理內存,並有效地利用可用的系統資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除