컴퓨터 시스템 : CSAPP 7장 정리 - 7.1 ~ 7.5
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7장 : 링커 (Linking)링킹이란?링킹(Linking)은 하나 이상의 목적 파일(Object Files)을 결합하여 단일 실행 파일(Executable File)로 만드는 과정을 의미한다. 프로그램이 여러 파일로 나눠져 개발될 경우, 각 파일은 개별적으로 컴파일된 뒤에 링커에 의해 결합된다.링커는 단순히 파일들을 이어 붙이는 수준을 넘어서 다음과 같은 중요한 일을 한다.심볼 결합(Symol Resolution)함수나 변수 이름과 같은 심볼을 찾아 서로 연결한다. 예를 들어 main.c에서 sum() 함수를 호출하면, 링커는 sum.c의 sum() 정의를 찾아 연결한다.재배치(Relocation)각 목적 파일의 코드와 데이터를 실행 가능한 주소로 조정한다. 각 파일은 자신의 시작 주소가 0인 것처럼 ..
스택(Stack) 구현 (C언어) : Part.3 - get_size, reverse, copy 구현
·
크래프톤 정글
이전 포스팅에서 스택의 기본적인 기능들을 구현했다. 이번 Part3에서는 일종의 심화 기능들을 구현해 보겠다. 사실 이전 포스팅에서 생각보다 많은 기능들을 구현했다. 하지만 간단한 기능들이 다수였다. 반면 이번 기능들은 심화 기능이니 비교적 복잡하다 느낄 수 있다.1. 구현 목표get_size : 스택의 크기를 구한다.reverse_stack : 스택을 뒤집는다.copy_stack : 스택의 값을 복사한다.2. 기능 구현🔨 get_sizeget_size 함수는 스택의 사이즈를 구하는 함수이다. 스택의 사이즈를 구하는 방법은 간단하다 스택의 노드들을 반복문으로 순회하며 순회할 때마다 카운트 변수의 값을 증가시키고 반복이 끝났을 때 반환하면 끝이다.int get_size(Stack *stack) { ..
스택(Stack) 구현 (C언어) : Part.2 - push, pop, free_stack, peek구현
·
크래프톤 정글
본격적인 스택 구현의 첫 시간이다. 우리는 push, pop, free_stack, peek을 구현해 볼 것이다. 만약 같이 따라 해볼 예정이라면 이전 환경설정 포스트를 확인하는 것을 추천한다.2025.04.16 - [크래프톤 정글] - 스택(Stack) 구현 (C언어) : Part.1 - 초기 환경 설정 & 구현할 함수 소개 스택(Stack) 구현 (C언어) : Part.1 - 초기 환경 설정 & 구현할 함수 소개이번에는 C언어를 이용해 스택을 직접 구현해보려고 한다. 링크드 리스트를 직접 구현했던 내용도 있으니 링크드 리스트에 대해서 부족하지만 정리했던 내용을 확인하려면 이 전 포스팅 했던www.gowoong.com1. 구현 목표init_stack : 스택의 값을 초기화 한다. (보너스)push : ..
스택(Stack) 구현 (C언어) : Part.1 - 초기 환경 설정 & 구현할 함수 소개
·
크래프톤 정글
이번에는 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 - [크래프톤 정글..
링크드리스트(LinkedList) 구현 (C언어) : Part.6 - 수정 및 회고
·
크래프톤 정글
지금까지 링크드 리스트를 구현했다. 하지만 내가 처음 구현할 때 미처 생각지 못하고 넘어갔던 내용이 있다. 모든 함수를 Node를 이용해 호출하고 Node를 인자로 담고 있었다. 그렇다 보어 어떤 함수는 이중 포인터를 사용하는 함수가 되어 버렸다. 이 것을 수정하려고 한다.1. 구현 목표구조체 ll (linkedlist) 를 선언하고 모든 코드를 ll을 사용하도록 수정한다.typedef struct linkedlist { Node* head; int size;} ll;지금까지 구현했던 코드의 가장 앞 단에 위와 같은 코드를 추가할 것이다. 이 ll 구조체는 head라는 노드 타입의 포인터 변수이고 추가로 size라는 int 타입 변수를 가진다.Node** head와 같은 방식에서 ll 구조체(..
링크드리스트(LinkedList) 구현 (C언어) : Part.5 - reverse_list, sort_list
·
크래프톤 정글
지금까지 삽입, 삭제, 조회와 같은 기본 적인 구현을 진행했다. 아마 이번 포스팅 내용이 가장 어렵다고 느낄 수 있다. 바로 뒤집기와 정렬이다.1. 구현 목표reverse_list : 링크드 리스트의 노드들의 순서를 뒤짚는다.sort_list : 링크드 리스트 내부의 값들의 순서를 정렬한다.2. 기능 구현🔨 reverse_list링크드 리스트의 순서를 reverse 하기 위해 어떤 작업을 수행해야 할까?구현 아이디어이다.prev, cur, next라는 노드 포인터 변수를 만들고 각각 NULL, head, NULL로 초기화한다.현재 노드가 NULL 즉 가장 마지막까지 갈 때까지 while 반복을 진행한다.next 값을 현재 cur 노드의 next 노드로 저장한다.cur 노드의 다음 값을 prev 즉 이전..
링크드리스트(LinkedList) 구현 (C언어) : Part.4 - delete_node, insert_at
·
크래프톤 정글
4번째 포스팅이다. 이번 포스팅에서는 노드를 삭제하는 delete_node와 특정 인덱스 위치에 노드를 삽입하는 insert_at 기능을 구현해 보려고 한다.1. 구현 목표insert_at : 링크드 리스트의 중간 원하는 인덱스에 데이터를 추가한다.delete_node : 원하는 값이 있는 노드를 링크드리스트에서 삭제한다.이번 구현은 이전과 비교해 조금 복잡하게 느껴질 수 있다.2. 기능 구현🔨 insert_at링크드 리스트의 특정 index 위치에 data를 가지는 node를 추가해야 한다.구현 아이디어새로운 노드를 먼저 생성해 둔다.만약 index 값이 0 이라면 이 전에 구현했던 insert_front와 같이 추가를 하면 된다.현재 노드를 지정할 cur 변수를 만들고 head로 지정한다.count..
링크드리스트(LinkedList) 구현 (C언어) : Part.3 - insert_front, print_list, find_node
·
크래프톤 정글
이 전 포스팅에서는 링크드 리스트를 생성하고 값을 넣고 링크드 리스트를 해제하는 과정을 다루었다. 이번에는 링크드 리스트의 가장 앞에 노드를 추가하는 insert_front 함수가 현재 링크드 리스트에 있는 값을 전부 출력하는 print_list 마지막으로 링크드 리스트에서 특정 노드를 찾는 find_node까지 구현할 것이다.1. 구현 목표다음과 같은 기능을 이번에 구현할 것이다.insert_front : 링크드 리스트 가장 앞에 추가print_list : 현재 리스트 안의 값 전부 출력하기find_node : 링크드 리스트 안의 특정 값 찾기2. 기능 구현🔨 insert_front이 전 포스팅에서 insert_end를 구현했다. 마지막에 추가할 때는 링크드 리스트의 끝까지 찾아가는 반복문을 실행했는..
링크드리스트(LinkedList) 구현 (C언어) : Part.2 - insert_end, free_lsit
·
크래프톤 정글
이 전 포스팅에서 초기 설정을 진행했다. 이제 본격 적으로 구현을 시작할 것이다. 시작에 앞서 아마 실행을 해 봤을 수. 있는데 실행하면 현재 테스트 코드에서 호출하고 있는 함수들이 실제 구현되지 않았다고 에러를 발생시킬 것이다. 그래서 우리가 구현을 끝냈거나 구현을 진행할 예정인 테스트 코드는 제외하고 나머지는 주석 처리를 해 두면 된다.1. 구현 목표우리가 이번에 구현할 기능은 아래와 같다.create_node : 링크드 리스트에 추가할 노드 생성insert_end : 링크드 리스트의 끝에 노드 추가free_list : 링크드 리스트 전체 삭제 및 동적 메모리 해제링크드 리스트는 노드라고 하는 요소들을 연결해서 구현한다고 할 수 있고 그 말은 링크드 리스트를 구현하기 위해 먼저 노드를 만들 수 있어야..
링크드리스트(LinkedList) 구현 (C언어) : Part.1 - 초기 환경 설정
·
크래프톤 정글
크래프톤 정글 8기 37일 차 TIL 링크드리스트 구현하기 - C언어를 이용해 링크드 리스트를 직접 구현해보려고 한다. 아무래도 정글에서 준 과제는 링크드 리스트의 특성을 이용해 특정 함수를 구현하는 것을 요구하는데 과제만 해결하는 것을 넘어 직접 구현을 해 보면서 익히는 것이 더 좋을 것 같아서 직접 구현을 진행해 보려 한다. 링크드 리스트에 대해서 부족하지만 정리했던 내용을 확인하려면 이 전 포스팅 했던 글을 확인하는 것도 좋을 것 같다.2025.04.10 - [크래프톤 정글] - 크래프톤 정글 8기 - TIL 31일차 (링크드 리스트 - C)링크드 리스트 구현 전 준비본격 적으로 구현을 시작하기 전 준비해야 할 사항이 있다. 먼저 나는 구현의 검증을 담당해 줄 테스트 코드를 미리 작성해 두었다. 그..