Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

C언어 [C언어 동적할당 malloc] 본문

카테고리 없음

C언어 [C언어 동적할당 malloc]

프로앱등이 2020. 5. 3. 19:38

C언어 메모리 동적할당

동적 메모리 할당 또는 메모리 동적 할당컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 사용이 끝나면 운영체제가 쓸 수 있도록 반납하고 다음에 요구가 오면 재 할당을 받을 수 있다. 이것은 프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 정적 메모리 할당과 대조적이다.

동적 할당은 함수가 종료되거나 변수 영역을 벗어나면 자동으로 공간 해제가 이루어지는 스택을 사용한 자동 변수와 대조적이다. 프로세스의 정적 메모리 할당은 프로세스가 시작할 때 이미 정해진 메모리량으로 한정되어있기 때문에, 프로세스가 시작할 때부터 끝날 때까지 유지되는데 반해, 동적 할당은 프로세스의 실행 과정 중에 필요한 메모리를 운영체제에 요구해 할당받고 해제하는 것이 가능하다.

동적 할당 특징

C언어 malloc() 함수를 이용 동적 메모리 공간을 할당할 수 있다. stdlib.h 에 정의.

C언어 malloc() 함수는 동적 할당 실패 시 NULL을 반납한다.

C언어 malloc() 함수는 리턴 타입을 지정 해주지 않을 시 void*() 형을 반납한다.

C언어 malloc() 은 free() 함수를 이용하여 반드시 프로그램 종료 시 동적 할당 공간을 해제 해야 한다.

동적할당을 하는이유

1. 지역변수를 선언하게 되면 해당 함수가 종료되어야 stack영역에 할당된 변수가 메모리에서 지워짐.

2. 동적할당 malloc을 사용하게 되면 Heap영역에 할당이 되고,free()함수를 이용하여 사용자가 원할때 자원 할당 해제가 가능.

#include<stdio.h> #include<stdlib.h> //malloc 함수를 사용하기 위한 헤더파일 int main(){ int arr[5]={1,2,3,4,5}; int* arr2; int i,size; printf("동적할당 메모리의 크기 Byte : "); scanf("%d",&size); arr2 = (int*) malloc(sizeof(int) * size); //힙영역에 동적할당 if(arr2 == NULL) //동적 할당이 실패하면 malloc함수는 NULL을 리턴한다. { printf("동적할당 실패"); return 0; } else { for(i=0;i<5;i++) { arr2[i] = arr[i]; printf("%d",arr2[i]); } free(arr2); //동적할당 해제 return 0; } 출력결과 동적할당 메모리의 크기 Byte : 5 12345

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
#include<stdlib.h> //malloc 함수를 사용하기 위한 헤더파일
 
int main(){
    
    int arr[5]={1,2,3,4,5};
    int* arr2;
    int i,size;
    
    printf("동적할당 메모리의 크기 Byte : "); 
    scanf("%d",&size);
    
    arr2 = (int*malloc(sizeof(int* size); //힙영역에 동적할당 
    
    if(arr2 == NULL//동적 할당이 실패하면 malloc함수는 NULL을 리턴한다.
    {
        printf("동적할당 실패");
        return 0;
    }
    else
    {
        for(i=0;i<5;i++)
        {
            arr2[i] = arr[i];
            printf("%d",arr2[i]); 
        }
        free(arr2); //동적할당 해제
        return 0;
    }
 
출력결과
동적할당 메모리의 크기 Byte : 5
12345
 

위와 같이 코드를 선언 할수 있다.

메모리 할당 함수 와 기능