프로그래밍/c언어 기초부터 실무까지 복습

메모리 동적할당_ 292~316

상세 2021. 2. 17. 00:58

1. 메모리 구조

 1). 코드 : 프로그래머가 만든 함수, 내장 함수들이 이곳에 저장된다.

 2). 데이터 : 전역 변수(글로벌 변수), 정적 변수들이 이곳에 저장되고 프로그램이 실행되고 끝날때까지 남아있는다.

3). 스택 : 지역변수, 함수의 인자(파라메터) 들이 이곳에 저장되고 함수가 실행될때부터 종료될때까지 남아있는다.

 

2. 동적할당 함수들

 

1) malloc()

int* pmall = (int*)malloc(개수 * 변수의 크기?); 정도로 선언할수 있고 인자로 준 크기만큼 힙에 메모리를 할당한다.

이 힙에 할당된 값은 프로그램 종료시까지 남아 있고. pmall에 힙의 시작주소가 담겨 있어 return하여 함수가 끝난 후에도 사용할수 있다. 

 

2) calloc()

int* pcall = (int*)calloc(개수, 변수의 크기); 얘는 malloc()와 비슷하나 인자를 두개 받는다. 대충 malloc()가 *로 구분하던걸 쉼표로 더 명확하게 해놓은 느낌. 암튼 특징은 위와 동일하다.

 

3) realloc()

int* preal = (int*)realloc(pmall, 새로운 개수 * 변수의 크기); 형태로 기존에 힙에 할당했던 배열의 크기를 바꾼다.

리턴값은 만약 힙 값이 여유가 있다면 같고 여유가 없다면 기존의 값은 복사되어 다른 주소에 저장된다.

+ 이 경우 인자로 전달된 것들은 free();로 해제하지 못한다.

 

4) free()

free(이름);  할당한 힙메모리를 해제하는 함수이다. 요걸 안하면 메모리 누수가 생길수 있다고 한다.

 

+기억나는데로 머리에 남은걸 거의 적은거라 틀린게 많을수 있습니다.