컴퓨터 시스템 13

링킹 (linking) 소스파일과 헤더파일

먼저 C 코드 를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 컴파일(compile) 이라는 과정이 진행됩니다. 이는 단일소스코드전체를어셈블리어(기계어와1: 1대응이되어있음)로변환해줍니다(이때, 목적코드라 불리는 확장자가 .o 인 파일이 생성됩니다). 이 과정이 끝나게 되면 링킹(linking) 이라는 과정이 진행되는데 말그대로 각기 다른 파일에 위치한 소스 코드들을 한데 엮어서 하나의 실행 파일로 만들어지는 과정이라 생각하시면 됩니다. 링킹 과정에서 특정한 소스 파일에 있는 함수들이 어디어디에 있는지 찾는 과정을 거치게 되는데 예를 들어서 test.c 의 경우 compare 함수가 어디있는지 찾게 됩니다. (눈치가 빠른 독자라면 printf 함수 역시 찾아야 함을 알 수 있는데 이에 대한 설명은 나중에 하..

동적 메모리 할당(Dynamic memory allocation), malloc 함수 구현 (malloc lab)

메모리는 한정된 자원이다. 기술이 많이 발전했지만, 아무리 메모리가 많아도 부족한 자원이라는 것도 사실인 듯 하다. 그래서 개발에 있어서 메모리 관리(Memory management)는 여러가지 핵심요소 중 하나다. 오늘은 동적메모리 할당에 대해 정리해보고, C를 통해 Malloc을 구현한 것을 정리하고자 한다. 대부분의 내용은 Computer system(Randal E. Bryant)에 있는 내용이다. (진짜 좋은 책인데 번역이 .... ) 정적 메모리 할당 (static memory allocation) 동적 메모리 할당에 앞서 대응되는 개념으로 정적 메모리 할당이라는 단어를 사용할 것 같았다. 찾아서 잠깐 간단히 설명... 프로그램이 실행되기 위해서는, 프로그램 구성 요소들 (코드와 다양한 변수등..

데이터 세그먼트 간단정리

데이터 세그먼트 프로그램이 실행시 램에 적재되는데, 메모리 위에 올라오는 프로그램의 내용을 코드 세그먼트 / 데이터 세그먼트로 분류 가능하다. 이 중 데이터 세그먼트의 구조는 아래와 같다. 일단 가장 먼저 주목할 부분은 읽기 전용(Read-Only) Data 부분 입니다. 이전에 상수와 리터럴에 대해서 이야기 할 때 등장하였는데 이 부분에 저장되는 데이터들은 값이 절대로 변경될 수 없습니다. 다시 말해 궁극적으로 보호 받는 부분 이죠. 텍스트 세그먼트라고도함 그다음으로그위에전역변수와정적변수가거처하는데이터영역이있습니다. 그위에바로 힙(Heap) 이라는 영역이 있는데 이 부분에 대해서는 나중에 설명하도록 합시다. 힙 맨 위를 보면 스택(Stack) 이 있습니다. 스택은 지역 변수가 거처하는 곳입니다. 스택의..