산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C - 메모리 관리

이 장에서는 C의 동적 메모리 관리에 대해 설명합니다. C 프로그래밍 언어는 메모리 할당 및 관리를 위한 여러 기능을 제공합니다. 이러한 기능은 에서 찾을 수 있습니다. 헤더 파일.

시니어 번호 기능 및 설명
1

무효 *calloc(int num, int 크기);

이 함수는 num의 배열을 할당합니다. 바이트 단위의 각 요소는 크기가 됩니다. .

2

무효(무효 *주소);

이 함수는 주소로 지정된 메모리 블록의 블록을 해제합니다.

3

무효 *malloc(size_t 크기);

이 함수는 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");

   /* allocate memory dynamically */
   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();을 사용하여 동일한 프로그램을 작성할 수 있습니다. 다음과 같이 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, "Zara Ali");

   /* allocate memory dynamically */
   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.");
   }
	
   /* suppose you want to store bigger description */
   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 );

   /* release memory using free() function */
   free(description);
}

위의 코드를 컴파일하여 실행하면 다음과 같은 결과가 나온다.

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

추가 메모리를 다시 할당하지 않고 위의 예를 시도할 수 있으며 strcat() 함수는 설명에 사용 가능한 메모리가 부족하여 오류가 발생합니다.


C 언어

  1. 읽기 전용 메모리(ROM)
  2. 마이크로프로세서
  3. C++ 메모리 관리:신규 및 삭제
  4. C 동적 메모리 할당
  5. Java - 문서 주석
  6. C++ 동적 메모리
  7. 자바 10 - 힙 할당
  8. 유지 관리 핸드북
  9. 자산 관리 이벤트 2012
  10. 4 자산운용 목표