Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Peruntukan Memori Dinamik ialah mekanisme dalam bahasa C. Ia membenarkan atur cara untuk memperuntukkan secara dinamik dan mengosongkan ruang memori pada masa jalanan. Dengan menggunakan peruntukan memori dinamik, program boleh memperuntukkan memori secara dinamik mengikut keperluan tanpa perlu menentukan saiz memori pada masa penyusunan. Ini membolehkan program mengurus memori dengan lebih fleksibel dan menggunakan sumber sistem yang tersedia dengan cekap.

Peruntukan Memori Dinamik ialah mekanisme dalam bahasa C. Ia membenarkan atur cara untuk memperuntukkan secara dinamik dan mengosongkan ruang memori pada masa jalanan. Dengan menggunakan peruntukan memori dinamik, program boleh memperuntukkan memori secara dinamik mengikut keperluan tanpa perlu menentukan saiz memori pada masa penyusunan. Ini membolehkan program mengurus memori dengan lebih fleksibel dan menggunakan sumber sistem yang tersedia dengan cekap.

WBOY
WBOYke hadapan
2023-09-07 11:49:021410semak imbas

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

Di sini kita akan mempelajari apa itu peruntukan memori dinamik dalam bahasa C. Bahasa pengaturcaraan C menyediakan beberapa fungsi untuk peruntukan dan pengurusan memori. Fungsi ini boleh didapati dalam fail pengepala . Fungsi berikut digunakan untuk peruntukan memori. .

void free(void *address);Fungsi ini mengeluarkan blok memori yang ditentukan oleh alamat. void *malloc(int num);Fungsi ini memperuntukkan tatasusunan bait dan meninggalkannya tanpa dimulakan. void *realloc(void *address, int newsize);Fungsi ini memperuntukkan semula memori, memanjangkannya kepada . Contoh kod
#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
Ubah saiz lokasi memori
num
newsize
Peruntukkan memori secara dinamik Semasa pengaturcaraan, jika anda tahu saiz tatasusunan, maka mudah untuk mentakrifkannya sebagai tatasusunan. Sebagai contoh, untuk menyimpan nama mana-mana orang, ia boleh mengandungi sehingga 100 aksara, jadi anda boleh mentakrifkan seperti berikut -
char name[100];
Tetapi sekarang mari kita pertimbangkan situasi di mana anda tidak tahu panjang teks yang anda perlukan untuk menyimpan, sebagai contoh, anda ingin menyimpan Penerangan terperinci tentang topik. Di sini kita perlu menentukan penunjuk kepada watak tanpa menentukan berapa banyak memori yang diperlukan, dan kemudian seperti yang diperlukan, kita boleh memperuntukkan memori seperti yang ditunjukkan dalam contoh berikut -
OutputYang sama boleh ditulis menggunakan program calloc(); satu-satunya masalah ialah anda perlu menggantikan malloc dengan calloc seperti yang ditunjukkan di bawah -
calloc(200, sizeof(char));
Jadi anda mempunyai kawalan penuh dan boleh melepasi sebarang nilai saiz apabila memperuntukkan memori, tidak seperti tatasusunan yang mempunyai saiz yang telah ditentukan, anda tidak boleh mengubahnya.
Apabila program anda keluar, sistem pengendalian secara automatik akan mengeluarkan semua memori yang diperuntukkan oleh program anda, tetapi sebagai amalan yang baik, apabila anda tidak lagi memerlukan memori, anda harus memanggil fungsi percuma( ) untuk membebaskan ingatan.

Sebagai alternatif, anda boleh menambah atau mengurangkan saiz blok memori yang diperuntukkan dengan memanggil fungsi realloc(). Mari kita semak semula atur cara di atas dan gunakan fungsi realloc() dan free() -

Contoh kod

#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);
}

Output

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

Anda boleh mencuba contoh di atas tanpa memperuntukkan semula memori tambahan, fungsi strcat() akan Penerangan memberikan ralat kerana kekurangan memori yang tersedia.

Atas ialah kandungan terperinci Peruntukan Memori Dinamik ialah mekanisme dalam bahasa C. Ia membenarkan atur cara untuk memperuntukkan secara dinamik dan mengosongkan ruang memori pada masa jalanan. Dengan menggunakan peruntukan memori dinamik, program boleh memperuntukkan memori secara dinamik mengikut keperluan tanpa perlu menentukan saiz memori pada masa penyusunan. Ini membolehkan program mengurus memori dengan lebih fleksibel dan menggunakan sumber sistem yang tersedia dengan cekap.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Pengelasan dan Contoh AlgoritmaArtikel seterusnya:Pengelasan dan Contoh Algoritma