C/기초

동적 메모리

appmaster 2019. 8. 1. 13:04

동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당 받는 것을 말한다. 프로그램에서는 필요한 만큼의 메모리를 시스템으로부터 할당을 받아서 사용하고, 사용이 끝나면 시스템에 메모리를 반납한다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납 메모리를 효율적으로 사용할 수 있는 것이다. 동적 메모리는 malloc()계열의 라이브러리 함수를 사용하여 할당 받아 사용할 수 있다.

 

동적메모리는 마치 수납 공간에서 물건을 꺼내는 것과 비슷하다. 물건의 사용이 끝나면 다시 수납 공간에 물건을 놓아햐한다. 만약 물건을 제대로 반납하지 않으면 다른 사람이 해당 물건을 사용할 수 없기 때문이다. 메모리 또한 마찬가지다. 동적 메모리의 사용이 끝나면 반드시 해당 메모리 영역을 명시적으로 반납해주어야한다.

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

// 동적 메모리 기초 예제

int main(void) {
	int* pi; //Point Integer를 뜻함

	pi = (int*)malloc(sizeof(int)); // malloc = 메모리를 할당하라.(int의 크기만큼 할당하라.)
    //(int*) 이 뜻은 소괄호안에있는것으로 형변환 해달라는 뜻이다.
	
	if (pi == NULL) { //동적메모리 할당에 실패 했다면
		printf("동적 메모리 할당에 실패했습니다. \n");
		exit(1); // 이프로그램을 종료한다.
	}

	*pi = 100; //pi라는 포인터 값에 100을 넣어준다.
	printf("%d\n", *pi); //그리고 그값을 출력하면 된다.

	free(pi);
	// 동적 메모리 사용한 이후에는 무조건 메모리를 반환한다. 이것은 매우 중요하다.
	// 전반적으로 메모리의 안정성과 효율성을 높이기 떄문이다.
	// 현재 할당된 4byte만큼의 메모리를 할당 해재해준다는 의미이다.

	return 0;
}

 

 

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

// 동적메모리로 알파벳 출력하기

int main(void) {
	char* pc = NULL;
	int i = 0;
	pc = (char*)malloc(100 * sizeof(char)); //하나의 문자만큼들어가는 캐릭터의 100배를 한것이다.
	
	if (pc == NULL) {
		printf("동적 메모리 할당에 실패했다.\n");
		exit(1);
	}


	for (i = 0; i < 26; i++) {
		*(pc + 1) = 'a' + i;
	}

	*(pc + i) = 0;
	//아스키 코드에서 0은 NULL을 의미한다.

	printf("%s\n", pc);
	free(pc);


	return 0;
}
#include <stdio.h>
#include <stdlib.h>


int main(void){

	int* pi, i;
	pi = (int*)malloc(5 * sizeof(int));
    // Ram에 총5개의 공간이 할당이 되어서 그중 첫번째에 해당하는 메모리 주소를 pi가 가지게됨.
	if (pi == NULL) {
		printf("동적 메모리 할당에 실패하였습니다.\n");
		exit(1);
	}
	pi[0] = 100;
	pi[1] = 200;
	pi[2] = 300;
	pi[3] = 400;
	pi[4] = 500;

	for (i = 0; i < 5; i++) {
		printf("%d\n", *(pi + i));
	}
	free(pi);
	return 0;
}

'C > 기초' 카테고리의 다른 글

동적 메모리 활용  (0) 2019.08.02
파일 입출력  (0) 2019.08.01
구조체 활용  (0) 2019.07.30
구조체  (0) 2019.07.30
문자열  (0) 2019.07.30