관리 메뉴

IT창고

C 동적할당 본문

프로그래밍/C

C 동적할당

방구석여포 2018. 6. 5. 16:04

C언어에서 동작할당에 대해 알아보겠습니다.

메모리를 할당할때 정적할당과 동적할당이 있습니다. 정적할당은 일반 변수나 배열(코드에 공간의 크기/고정)을 사용하는 방식으로 int iNum과 같이 사용합니다.

정적할당은 기본적으로 자동 소멸이 됩니다.


동적할당은 함수를 이용하여 '런타임' 도중 원하는 크기의 메모리 할당합니다. 

- 런타임 : 프로그램 실행 중

함수로는 malloc()과 free()가 있습니다. malloc()함수가 동적할당을 해주는 함수이며 free()함수가 할당된 공간을 사용한 뒤에 할당공간을 삭제해주는 역활을 합니다.


JAVA언어 같은 경우는 JVM(java.exe)이 메모리 관리를 해주지만 C언어는 프로그래머가 직접 삭제해줘야합니다 만약 삭제해주지 않는다면 메모리 상에 공간이 계속 존재하게 되며 이러한 메모리가 계속 쌓이면 프로그램 오류가 일어나게 됩니다 이와 같은 현상을 메모리 누수 현상이라 합니다.


먼저 정적할당 코드를 확인해보겠습니다. 만약 3개의 과목을 4개 혹은 5개로 바꿔야한다면 변수에 숫자와 배열을 직접 바꿔줘야만 합니다. 

위의 코드를 동작할당 코드로 바꿔보겠습니다.

pArrScore = (int *)malloc(iCount * sizeof(int)); 코드는 위의 정적할당 코드의 int iArrScore[3];과 같습니다. 형변환을 하고 만들고 싶은 공간의 크기를 계산하는 방식입니다.

동적할당 + 초기화까지 완료되면 포인터변수를 배열처럼 사용할수있게 됩니다.


선행처리에 대해 알아보겠습니다.

선행처리는 컴파일 이전에 하는 일로 단순 치환 혹은 특정 패턴 일떄 변경을 하며 매크로라고 할수있습니다.

(#define 매크로)로 사용됩니다. 이런 매크로를 사용하는 이유는 3.14가 사용된 모든 코드를 하나씩 바꿀필요없이 define PI만 바꾸면 모두 변경이 가능하기 때문입니다. 


마지막으로 전역변수에 대해 간단히 알아보겠습니다.

먼저 지역변수는 특정 지역에서 생성되는 변수로 지역이 끝나면 자동 소멸합니다. 

전역변수는 전체영역에서 존재하며 함수 외부에 선언하게 되고 프로그램 시작 시 생성되며 프로그램이 종료가 되면 소멸합니다. 전역변수는 매개변로 값을 전달할 필요가 없습니다.

iNum변수는 함수가 호출되면 생성되고 수행이 끝나면 소멸합니다 하지만 static int sNum2 변수는 함수안에서 전역변수화를 하는 방법으로 지역안에서 static을 이용하여 전역변수처럼 만들어진 변수 입니다. 기능은 함수 밖에 선언된 전역변수와 같습니다.

'프로그래밍 > C' 카테고리의 다른 글

C 구조체(Struct)  (0) 2018.06.04
C 포인터(Pointer)  (0) 2018.06.02
C 배열(Array)  (0) 2018.05.29
C 함수 연습문제  (0) 2018.05.24
C Function (함수)  (0) 2018.05.24
Comments