บทช่วยสอน จัดการหน่วยความจำซี ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ จัดสรรหน่วยความจำแบบไดนามิก,Re: ปรับขนาดหน่วยความจำและหน่วยความจำฟรี,
บทนี้จะอธิบายการจัดการหน่วยความจำแบบไดนามิก C ภาษา C สำหรับการจัดสรรและการจัดการหน่วยความจำให้ฟังก์ชั่นหลาย ฟังก์ชั่นเหล่านี้สามารถพบได้ใน<stdlib.h> ไฟล์ส่วนหัว
序号 | 函数和描述 |
---|---|
1 | void *calloc(int num, int size); 该函数分配一个带有num个元素的数组,每个元素的大小为size字节。 |
2 | void free(void *address); 该函数释放 address 所指向的h内存块。 |
3 | void *malloc(int num); 该函数分配一个num字节的数组,并把它们进行初始化。 |
4 | 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, "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 ); }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Name = Zara Ali Description: Zara ali a DPS student in class 10th
โปรแกรมดังกล่าวยังสามารถใช้calloc () ในการเขียนเพียงแค่ต้องเปลี่ยน calloc malloc ที่แสดงด้านล่าง:
calloc(200, sizeof(char));
เมื่อการจัดสรรแบบไดนามิกของหน่วยความจำคุณมีการควบคุมที่สมบูรณ์มากกว่าขนาดของค่าใด ๆ ที่สามารถผ่าน ผู้ที่กำหนดไว้ล่วงหน้าขนาดอาร์เรย์ขนาดไม่สามารถเปลี่ยนแปลงได้เมื่อมีการกำหนดไว้
เมื่อออกจากโปรแกรมระบบปฏิบัติการโดยอัตโนมัติเพิ่มหน่วยความจำทั้งหมดที่จัดสรรให้กับโปรแกรมแต่ขอแนะนำว่าคุณไม่จำเป็นต้องมีหน่วยความจำคุณควรจะเรียกฟังก์ชั่นฟรี () เพื่อหน่วยความจำฟรี
หรือคุณสามารถโทรrealloc ฟังก์ชั่น ()เพื่อเพิ่มหรือลดขนาดของบล็อกจัดสรรหน่วยความจำ ลองใช้ realloc () และฟรี () ฟังก์ชั่นดูอีกครั้งที่ตัวอย่างข้างต้น:
#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); }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Name = Zara Ali Description: Zara ali a DPS student.She is in class 10th
คุณไม่สามารถลองใหม่จัดสรรหน่วยความจำเสริม strcat () ฟังก์ชันสร้างข้อผิดพลาดเพราะมีหน่วยความจำรายละเอียดไม่เพียงพอที่เก็บไว้