
프로그래밍을 공부한 내용을 정리하며 기록하고 있습니다 📝
목차
- 프로그래밍 언어의 종류
- 프로그램 실행 과정
- 메모리 할당과 구조 (Memory Allocation)
프로그래밍 언어의 종류
프로그래밍 언어는 크게 저급 언어 (Low-level langauge) 와 고급 언어 (High-level langauge) 로 분류할 수 있습니다.
저급 언어는 기계(컴퓨터) 친화적, 고급 언어는 인간 친화적이라고 단순하게 설명 가능합니다.

저급 언어는 기계 친화적이라 인간이 읽기 매우 불편한 데에 반해, 고급 언어는 사람이 사용하는 자연어를 바탕으로 작성되기 때문에 인간 친화적이라고 할 수 있습니다. 대신 고급 언어는 작성 이후 코드를 컴퓨터가 읽을 수 있게 기계어로 번역하는 과정이 필요합니다.
프로그램 실행 과정

프로그램을 만들고 실행할 때, 에디터 상에서 코드를 작성하고 이를 빌드하여 실행합니다. 프로그래머가 소스 코드 (source code, 원시 코드) 작성을 완료하면, IDE 등의 툴에서 소스 코드를 실행 파일으로 만드는 변환 과정들을 지원해줍니다.
이러한 과정을 다 묶어서 빌드 (Build) 과정, 컴파일러가 소스 코드를 목적 코드로 변환하는 과정을 컴파일 (Complie), 링커가 목적 코드 파일들을 하나의 실행 파일로 만드는 과정을 링킹 (Linking) 이라고도 부릅니다.
먼저 전처리기(Preprocessor)가 source code 에서 #include 문과 같은 전처리문들을 반영하여 enhanced source code 로 변환합니다.
이후 컴파일러에서 enhanced code 를 목적 코드 (object code) 로 변환합니다.
사실 이러한 목적 코드로의 변환 과정에는 컴파일러가 목적 코드를 어셈블리어 파일로 변환하고, 어셈블러가 이 어셈블리어 파일을 목적 코드로 변환하는 과정이 더 있지만 생략되었습니다.
마지막으로 링커(Linker)가 목적 코드 파일 여러개 (내가 작성한 코드와 라이브러리 등) 를 연결해 하나의 실행 파일 (exe) 로 만들어줍니다.
라이브러리는 크게 두 가지로, 링킹 과정에서 포함되는 정적(static) 라이브러리와 실행 과정 (Runtime) 에서 묶이는 동적 (Dynamic) 라이브러리로 나뉩니다. 동적 라이브러리의 경우, 외부 dll 파일이 프로그램 실행 중 가져와지게 됩니다.
메모리 할당과 구조 (Memory Allocation)
코드 내의 변수와 같은 데이터들은 프로그램을 실행하는 과정에서 메모리를 할당받고 차지하게 되는데,
이러한 과정에서 데이터의 종류에 따라 다른 메모리 영역에 저장되게 됩니다.

코드 영역 (code)
메모리의 코드 영역엔 함수와 같은 코드 데이터들이 할당되는 영역으로, 텍스트 영역이라고도 부릅니다.
CPU는 이 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.
데이터 영역 (Data)
메모리의 데이터 영역은 전역 변수와 정적(static) 변수가 저장되는 영역입니다.
C와 C++ 에서는 어느 클래스에도 속하지 않은 전역변수들이 할당되고, C#에서는 정적변수들이 할당됩니다.
프로그램이 시작될 때 할당되며, 프로그램 종료 시에 할당이 해제됩니다.
힙 영역 (Heap)
메모리의 힙 영역은 사용자가 직접 관리하는 영역으로, 사용자에 의해 메모리가 동적으로 할당되고 해제됩니다.
힙 영역의 메모리는 낮은 주소에서 높은 주소 방향으로 할당됩니다.
스택 영역 (Stack)
메모리의 스택 영역은 함수 호출과 연계되는 함수만의 지역 영역으로, 함수의 호출과 관계된 지역 변수와 매개변수가 저장되는 영역입니다. 함수의 호출과 함께 메모리가 할당되며, 함수의 호출이 완료되면 메모리 할당이 해제됩니다.
스택 영역은 후입선출(Last-In First-Out) 으로, 가장 나중에 호출된 함수의 메모리 영역이 먼저 해제되게 됩니다. 스택 영역의 메모리는 높은 주소에서 낮은 주소 방향으로 할당됩니다.
힙 영역에 비해서 비교적 속도가 빠른 대신, 메모리 용량은 적습니다.
출처
프로그램 동작 과정 - 동작 구조 이미지
메모리 구조 - TCPSchool 9. 32) 메모리의 구조
'Programming' 카테고리의 다른 글
CS : 주소값과 메모리 (0) | 2024.11.06 |
---|