Latest web development tutorials

C Manajemen Memory

Bab ini akan menjelaskan C manajemen memori dinamis. bahasa C untuk alokasi dan manajemen memori memberikan beberapa fungsi. Fungsi-fungsi ini dapat ditemukan di<stdlib.h> file header.

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到newsize

alokasi memori dinamis

Ketika pemrograman, jika Anda mengetahui terlebih dahulu ukuran array, definisi array yang lebih mudah. Sebagai contoh, sebuah array untuk menyimpan nama, yang menampung hingga 100 karakter, sehingga Anda dapat menentukan array, sebagai berikut:

char name[100];

Namun, jika Anda tidak tahu sebelumnya panjang teks yang akan disimpan, seperti penjelasan rinci tentang topik yang terkait dengan toko Anda. Di sini, kita perlu mendefinisikan sebuah pointer yang menunjuk ke karakter terdefinisi ukuran memori belajar, dan kemudian tindak lanjut untuk mengalokasikan memori pada permintaan, sebagai berikut:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

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

Program di atas juga dapat menggunakancalloc () untuk menulis, hanya perlu mengganti calloc malloc, seperti yang ditunjukkan di bawah ini:

calloc(200, sizeof(char));

Ketika alokasi memori dinamis, Anda memiliki kontrol penuh atas ukuran nilai apapun dapat dilalui. Mereka yang telah ditentukan ukuran array, ukuran tidak dapat diubah setelah itu didefinisikan.

Kembali menyesuaikan ukuran memori dan memori

Ketika program keluar, sistem operasi secara otomatis membebaskan semua memori dialokasikan untuk program ini, bagaimanapun, merekomendasikan bahwa Anda tidak perlu memori, Anda harus memanggil fungsifree () untuk membebaskan memori.

Atau, Anda dapat memanggil fungsirealloc () untuk menambah atau mengurangi ukuran blok memori yang dialokasikan.Mari kita gunakan realloc () dan free () fungsi, melihat kembali pada contoh di atas:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student.");
   }
   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* 使用 free() 函数释放内存 */
   free(description);
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

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

Anda tidak dapat mencoba untuk kembali mengalokasikan memori tambahan, strcat () fungsi menghasilkan kesalahan karena tidak cukup memori yang tersedia deskripsi disimpan.