여기서 C 언어의 동적 메모리 할당이 무엇인지 알아봅니다. C 프로그래밍 언어는 메모리 할당 및 관리를 위한 여러 기능을 제공합니다. 이러한 기능은
Function | Description |
---|---|
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() 함수는 다음과 같은 설명을 제공합니다. 사용 가능한 메모리 부족으로 인한 오류입니다.
위 내용은 동적 메모리 할당은 C 언어의 메커니즘입니다. 이를 통해 프로그램은 런타임에 메모리 공간을 동적으로 할당하고 해제할 수 있습니다. 동적 메모리 할당을 사용하면 프로그램은 컴파일 타임에 메모리 크기를 결정할 필요 없이 필요에 따라 동적으로 메모리를 할당할 수 있습니다. 이를 통해 프로그램은 메모리를 보다 유연하게 관리하고 사용 가능한 시스템 리소스를 효율적으로 사용할 수 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!