프로그램 : 플그래머가 만든 프로그램 파일
프로세스 : 1. CPU가 실행 파일에 있는 명령들을 실행할 수 있도록 운영체제가 실행 파일의 명령들을 읽어서
메모리에 재구성한 것
2. 실행 중인 프로그램 이라고도 함
3. 세그먼트의 집합으로 구성
세그 먼트 : 1. 여러 거지 정보나 사용자가 입력한 데이터를 기억하는 메모리 공간
2. 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트
정적 메모리 할당 : 1. 컴파일러가 소스 코드를 기계어로 번역하는 시점에 변수에 크기에 맞게 메모리를 할당하는 것
2. 프로그램이 실행될 때 메모리의 위치가 결정됨
3. 프로그래 실행 중에 할당된 메모리의 크기는 변경이 불가
전역 변수 : 1. 프로그램이 시작해서 종료할 때까지 종료할 때까지 유지
2. 프로그램 실행 중에 전역 변수를 추가 혹은 삭제 불가
3. 프로세스의 데이터 세그먼트에 저장됨
지역 변수 : 1. 함수가 호출될 때 메모리에 할당되었다가 함수가 끝나면 사라짐
2. 프로세스의 스택 세그먼트에 저장됨
스택 : 1. 스택은 자료 구조의 한 종류
2. 두개의 포인터로 많은 양을 데이터를 효과적으로 관리하는 이론
3. 베이스 포인터를 기준으로 데이터를 추가할 때마다 순서대로 데이터를 쌓아 올림
4. 스택 포인터로 새로운 데이터가 추가될 위치를 가리킴
스택 프레임 : 1. 함수를 호출할 때 일어나는 스택의 변화
2. 스택 프레임은 컴파일러가 C 언어 코드를 기계어로 번역하는 시점에 결정됨
3. 지역 변수를 추가 및 삭제하거나 배열 크기를 변경하려면 스택 프레임이 수정
되어야 하기 때문에 C 언어 코드를 다시 컴파일 해야 함
동적 메모리할당 : 1. 원하는 시점에 원하는 크기만큼 힙(Heap)에 메모리 할당 가능
2. 메모리 사용이 끝나면 언제든지 할당한 메모리 해제 가능
3. Giga byte 단위까지 할당 가능
malloc 함수로 동적 메모리 할당하기
free 함수로 할당된 메모리 해제하기
할당되지 않은 메모리를 해제하는 경우
정적으로 할당된 메모리를 해제하는 경우
장점 : 1. 스택에 비해 큰 크기의 메모리 할당 가능
2. 메모리를 할당하고 해제하는 시점을 지정 가능
3. 할당되는 메모리의 크기를 프로그램 실행 중에 변경 가능
단점 : 1. 코드가 복잡해짐
2. 작은 메모리를 사용할 때에는 비효율적
다차원 포인터
다차원 포인터 정의하기
2차원 포인터의 구성
2차원 배열과 동적 메모리 할당