-
반응형
프로그램(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