C언어 메모리 동적할당 메모리

    2018-02-10 14:05:45 작성

    C언어의 메모리 구성은 크게 4가지로 나누어집니다.

    구분 설명
    코드 영역
    (Code Area)
    코드 영역은 이름 그대로 실행할 프로그램 코드가 저장되는 메모리 공간입니다.
    CPU는 코드영역에 저장된 명령문들을 하나씩 가져가서 실행합니다.
    데이터 영역
    (Data Area)
    전역변수와 static 변수가 할당되는 공간입니다.
    이 영역의 변수들은 프로그램의 시작과 동시에 메모리 공간에 할당되며 프로그램 종료시 까지 남아있는 특징을 가집니다.
    힙 영역
    (Heap Area)
    데이터 영역과 스택영역에 할당되는 변수들은 생성과 소멸 시점이 이미 결정되어 있습니다.
    힙 영역은 프로그램 실행중에 프로그래머가 원하는 시점에 변수를 할당하고, 소멸하는 공간입니다.
    스택 영역
    (Stack Area)
    지역변수와 매개변수가 할당되는 공간입니다.
    이 영역의 할당되는 변수들은 선언된 함수가 종료되면 소멸되는 특징이 있습니다.

    메모리

    스택은 지역변수를 설명하며 이미 살펴 보았습니다.
    다음 소스를 보고 프로그램 종료시까지 메모리의 변화를 생각해보세요.

    #include <stdio.h>
    
    void func2(int n);
    void func1(int n);
    
    int num;
    
    int main(void) {
    	int num1 = 20;
    	func1(num1);
    	return 0;
    }
    void func2(int n) {
    	int num3 = n + 1;
    }
    void func1(int n) {
    	int num2 = n + 1;
    	func2(num2);
    }

    다음 소스를 보고 무엇이 문제인지 생각해 보세요.

    #include <stdio.h>
    
    char* getStr(void);
    
    int main(void) {
    	char* str1;
    	char* str2;
    	str1 = getStr();
    	printf("name1 : %s\n", str1);
    	str2 = getStr();
    	printf("name2 : %s\n", str2);
    	return 0;
    }
    
    char* getStr(void) {
    	char str[30];
    	printf("문자열을 입력하세요 : ");
    	scanf("%s", str);
    	return str;
    }