• 2022. 6. 8.

    by. 데브촙

    반응형

    프로그램(program) : 프로그래머가 만든 프로그램 실행 파일

     

    프로세스(process)

    - CPU가 실행 파일에 있는 명령들을 실행할 수 있도록 운영체제가 실행 파일의 명령들을 읽어서 메모리에 재구성한 것

    - ‘실행중인 프로그램이라고도 함

    - 세그먼트의 집합으로 구성

     

    세그먼트(segment)

    여러 가지 정보나 사용자가 입력한 데이터를 기억하는 메모리 공간

    코드 세그먼트, 데이터 세그먼트, 스택 세그먼트

     

    정적 메모리 할당 (Static Memory Allocation)

    - 컴파일러가 소스 코드를 기계어로 번역하는 시점에 변수의 크기에 맞게 메모리를 할당하는 것

    프로그램이 실행될 때 메모리의 위치가 결정됨

    그래서 프로그램 실행 중에 할당된 메모리의 크기는 변경 불가

     

    변수가 메모리에서 유지되는 시간

    전역 변수

    - 프로그램이 시작해서 종료할 때까지 유지

    - 프로그램 실행 중에 전역 변수를 추가 혹은 삭제 불가

    - 프로세스의 데이터 세그먼트에 저장

    지역 변수

    - 함수가 호출될 때 메모리에 할당되었다가 함수가 끝나면 사라짐

    - 프로세스의 스택 세그먼트에 저장

     

     

    정적으로 할당된 메모리를 관리하는 법

    - 지역 변수를 사용하려면 그 변수의 현재 주소를 알아야 함

    - 각 지역 변수의 현재 주소를 기억하려면 지역 변수의 개수만큼 메모리가 더 필요( => 변수에 대한 메모리 + 변수 포인터에 대한 메모리)

    - 같은 함수에 선언한 지역 변수들을 하나의 메모리 그룹으로 관리 가능

    void Test()
    {
    	int a, b, c, d;	// 컴파일할 때 변수가 4개이고 16바이트 크기라는 것을 알 수 있음
    	a=5;	// START 주소에 5 대입
    	c=3;	// START+8 주소에 3 대입
    }

     

    - 지역 변수를 시작 위치(START) 포인터와 끝 위치(END) 포인터를 사용하여 관리 가능

    void Test()
    {
    	int a, b, c, d;
    	a=5;	// START 주소에 5 대입
    	c=3;	// START+8 주소에 3 대입
    }

    - END 포인터가 필요한 이유?
    : 다음 함수가 시작되는 위치가 어딘지 알기 위해. C언어는 함수의 집합체이기 때문에 함수별로 어디가 끝인지 알아야 메모리 관리 가능

     

    반응형

    'C' 카테고리의 다른 글

    배열 주소  (0) 2023.11.07
    배열과 포인터의 합체  (0) 2022.05.25
    배열을 사용하는 포인터  (0) 2022.05.24