7.6 심볼 결합 (Symbol Resolutuion)심볼 결합은 링커가 각 심볼 참조(reference)를 정확히 하나의 정의(definition)와 연결시키는 과정이다. 이 작업은 링커가 수행하는 주요 작업 중 하나이며, 프로그램이 여러 모듈로 나뉘어 작성될 때 매우 중요하다.7.6 링커가 중복된 심볼 이름을 해결하는 방식입력 : 여러개의 목적 파일링커는 여러 개의 재배치 가능한 객체 모듈(relocatable object modules)을 입력으로 받는다.이들 각 모듈은 여러 개의 심볼을 정의하며, 일부는 로컬(local)이고 일부는 전역(global)이다.문제 : 전역 심볼 중복두 개 이상의 모듈이 같은 이름의 전역 심볼을 정의할 경우, 링커는 다음 중 하나를 해야 한다.에러로 보고하고 종료하나를..
7장 : 링커 (Linking)링킹이란?링킹(Linking)은 하나 이상의 목적 파일(Object Files)을 결합하여 단일 실행 파일(Executable File)로 만드는 과정을 의미한다. 프로그램이 여러 파일로 나눠져 개발될 경우, 각 파일은 개별적으로 컴파일된 뒤에 링커에 의해 결합된다.링커는 단순히 파일들을 이어 붙이는 수준을 넘어서 다음과 같은 중요한 일을 한다.심볼 결합(Symol Resolution)함수나 변수 이름과 같은 심볼을 찾아 서로 연결한다. 예를 들어 main.c에서 sum() 함수를 호출하면, 링커는 sum.c의 sum() 정의를 찾아 연결한다.재배치(Relocation)각 목적 파일의 코드와 데이터를 실행 가능한 주소로 조정한다. 각 파일은 자신의 시작 주소가 0인 것처럼 ..
이전 포스팅에서 스택의 기본적인 기능들을 구현했다. 이번 Part3에서는 일종의 심화 기능들을 구현해 보겠다. 사실 이전 포스팅에서 생각보다 많은 기능들을 구현했다. 하지만 간단한 기능들이 다수였다. 반면 이번 기능들은 심화 기능이니 비교적 복잡하다 느낄 수 있다.1. 구현 목표get_size : 스택의 크기를 구한다.reverse_stack : 스택을 뒤집는다.copy_stack : 스택의 값을 복사한다.2. 기능 구현🔨 get_sizeget_size 함수는 스택의 사이즈를 구하는 함수이다. 스택의 사이즈를 구하는 방법은 간단하다 스택의 노드들을 반복문으로 순회하며 순회할 때마다 카운트 변수의 값을 증가시키고 반복이 끝났을 때 반환하면 끝이다.int get_size(Stack *stack) { ..
본격적인 스택 구현의 첫 시간이다. 우리는 push, pop, free_stack, peek을 구현해 볼 것이다. 만약 같이 따라 해볼 예정이라면 이전 환경설정 포스트를 확인하는 것을 추천한다.2025.04.16 - [크래프톤 정글] - 스택(Stack) 구현 (C언어) : Part.1 - 초기 환경 설정 & 구현할 함수 소개 스택(Stack) 구현 (C언어) : Part.1 - 초기 환경 설정 & 구현할 함수 소개이번에는 C언어를 이용해 스택을 직접 구현해보려고 한다. 링크드 리스트를 직접 구현했던 내용도 있으니 링크드 리스트에 대해서 부족하지만 정리했던 내용을 확인하려면 이 전 포스팅 했던www.gowoong.com1. 구현 목표init_stack : 스택의 값을 초기화 한다. (보너스)push : ..
이번에는 C언어를 이용해 스택을 직접 구현해보려고 한다. 링크드 리스트를 직접 구현했던 내용도 있으니 링크드 리스트에 대해서 부족하지만 정리했던 내용을 확인하려면 이 전 포스팅 했던 글을 확인하는 것도 좋을 것 같다.2025.04.16 - [크래프톤 정글] - 링크드리스트(LinkedList) 구현 (C언어) : Part.1 - 초기 환경 설정2025.04.16 - [크래프톤 정글] - 링크드리스트(LinkedList) 구현 (C언어) : Part.2 - insert_end, free_lsit2025.04.16 - [크래프톤 정글] - 링크드리스트(LinkedList) 구현 (C언어) : Part.3 - insert_front, print_list, find_node2025.04.16 - [크래프톤 정글..
지금까지 링크드 리스트를 구현했다. 하지만 내가 처음 구현할 때 미처 생각지 못하고 넘어갔던 내용이 있다. 모든 함수를 Node를 이용해 호출하고 Node를 인자로 담고 있었다. 그렇다 보어 어떤 함수는 이중 포인터를 사용하는 함수가 되어 버렸다. 이 것을 수정하려고 한다.1. 구현 목표구조체 ll (linkedlist) 를 선언하고 모든 코드를 ll을 사용하도록 수정한다.typedef struct linkedlist { Node* head; int size;} ll;지금까지 구현했던 코드의 가장 앞 단에 위와 같은 코드를 추가할 것이다. 이 ll 구조체는 head라는 노드 타입의 포인터 변수이고 추가로 size라는 int 타입 변수를 가진다.Node** head와 같은 방식에서 ll 구조체(..