은근한

C언어 13. 정적할당,동적할당,malloc,free 본문

카테고리 없음

C언어 13. 정적할당,동적할당,malloc,free

EsJoo 2013. 11. 12. 19:17

메모리의 정적할당 과 동적할당


정적할당


사용하는 운영체제에 따라 각 데이터형에 약속된 기억공간의 크기가 있고, 지정된 만큼 프로그램을 실행하는 프로세서


에 필요한 자원으로 할당 시켜준다. 이런것을 정적할당이라고 한다 즉,


프로그램 실행의 시작부분에서 필요한 만큼 미리 기억공간을 할당 받고 시작하는 것을 의미한다.



동적할당


동적할당은 정적할당과는 달리 프로그램 실행에서 특정 기억공간에 필요할때 필요한 만큼 시스템에 해당 공간

요청 이로 인해 시스템 자원을 좀더 원할하게 사용할 수 있다.




malloc,free 함수

참조헤더 파일 stdlib.h


동적할당을 위해 메모리할당과 할당 받은 공간에 대한 해제관련 명령어가 수행되어야 한다.


malloc 함수가 할당 free함수가 해제 동작을 수행


malloc의 형태


(데이터형 *) malloc (데이터형 사이즈) //데이터형 사이즈는 sizeof연산자로 구한다.


(void *)malloc(sizeof(int));


malloc 함수는 원하는 데이터형과 크기에 따른 메모리 공간을 할당해서 할당한 공간의 시작 주소를 리턴한다.


void 형은 모든 데이터형을 받을 수 있기때문에 void 포인터를 리턴한다.


malloc 함수는 할당된 메모리의 주소를 리턴하는데 동적 메모리를 사용하거나 해제하려면 


이 주소를 포인터 변수에 보관



free함수


free함수의 형태


free(할당했던 변수)


free 함수는 할당받은 공간을 다시 시스템에 되돌려주는 역할


ex) 간단한 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<stdlib.h>
 
void main()
{
    int num;
    int i,*pscore;
    
    printf("anynumber enter:");
    scanf("%d",&num);
    
    pscore = (int *)malloc(sizeof(int)*num);
    
    for(i=0;i<num;i++){
       printf("score enter %d:",i+1);
       scanf("%d",pscore+i);
    }
    for(i=0;i<num;i++)
        printf("address %d - value %d\n",pscore+i,*(pscore+i));
    
    free(pscore);
    }