Jungle 64

[TIL] C 네트워크 프로그래밍 - 소켓 생성하기

웹서버를 직접 구축해보자. 핀트OS를 시작하기 전에 웹 서버를 직접 만들어 보고 네트워크의 구성 요소와 어떻게 네트워크 방식이 가능한 것인지 확인해보겠다.  네트워크 프로그래밍을 위해 코드 속 함수들을 이용하여 어떻게 네트워킹하는지 이해하고 echo 서버와 클라이언트를 통신시키기 위해 소켓들을 생성해보자. hostinfo.c 코드 이해하기 먼저 이 파일에서는 실행 시 도메인 주소를 받아, 해당 도메인의 ip를 출력해주는 프로그램이다. 코드는 다음과 같다. #include "../csapp.h" #include #include #include int main(int argc, char **argv) { struct addrinfo *p, *listp, hints; char buf[MAXLINE]; int..

Jungle 2023.11.21

[TIL] 5주차 - (6) : 코드 재 분석 (realloc&coalesce) 후 최종 결과

오늘은 내가 짰던 realloc의 기존 문제점을 한번 살펴보고, 개선하여 좋아진 성능을 파악해보겠다. realloc 코드 재 분석 나는 내가 스스로 짠 realloc 코드가 최선이라고 생각하고 어쩔 수 없이 copy를 하는 비효율적인 상황 때문에 점수가 낮은 줄 알았다. 근데 팀원의 점수가 되게 높길래 팀원의 코드를 보니 realloc 점수가 너무 높아 해당 코드를 분석해보았다. 다음 코드가 팀원 분의 코드이다. void *mm_realloc(void *ptr, size_t size) { if (ptr == NULL) { return mm_malloc(size); } if (size == 0) { mm_free(ptr); return NULL; } size_t original_size = GET_SIZE..

Jungle 2023.11.14

[TIL] 5주차 - (5) : 스터디 문제 리뷰

오늘은 코알라 스터디 두번째 주간 문제를 풀었다. 난이도가 평이할 줄 알았는데 너무 어려워서 가장 쉬웠던 1문제 밖에 못맞추고 나머지 두개는 방향을 잘못 잡아서 풀지 못했다. 스터디 끝나고 어려운 나머지 두문제에 대해 토론했고, 토론한 내용을 토대로 다시 시도해서 푼 문제에 대해 리뷰하겠다. BaekJun - #10159 : 저울 (플로이드 워셜) 출처 : https://www.acmicpc.net/problem/10159 10159번: 저울 첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩 www.acmicpc.net 이 문제는 무게..

Jungle 2023.11.12

[TIL] 5주차 - (4) : realloc() 함수 개선

오늘은 realloc() 함수를 개선해 보겠다. realloc 함수 문제 인식 현재 realloc() 코드를 보자. void *mm_realloc(void *ptr, size_t size) { void *oldptr = ptr; void *newptr; size_t copySize; newptr = mm_malloc(size); if (newptr == NULL) return NULL; copySize = *(size_t *)((char *)oldptr - SIZE_T_SIZE); if (size < copySize) copySize = size; memcpy(newptr, oldptr, copySize); mm_free(oldptr); return newptr; } 현재 코드는 무조건 할당되어 있는 p..

Jungle 2023.11.11

[TIL] 5주차 - (3) : 동적 메모리 할당 기법 개선하기

이번 포스팅에는 지난 (2) 의 코드를 개선할 방안을 나열한 뒤 각각 구현한 코드를 실행해 보고 해당 결과를 확인해보겠다. 교재 코드의 할당 구동 절차 1. init()으로 런타임 heap의 틀을 구색 2. 처음에 크기가 큰 heap을 할당 (CHUNKSIZE heap) 3. 할당과 반환 작업 4. 3번 진행 중에 크기에 맞는 가용 블럭이 없다면 2번 순서에서 진행한 heap을 재 할당 개선 방안 제시 1. first fit으로 가용블럭을 탐색하고 있는 코드현재 코드는 first-fit으로 가용 블럭을 탐색하고 있다. 이 경우 heap의 초반부에 작은 블럭들이 편향되는 단점이 있으므로 next-fit과 best-fit으로 탐색하는 코드도 테스트 해 볼수 있다. 2. 즉시연결 (free 하자마자 연결탐색)..

Jungle 2023.11.10

[TIL] 5주차 - (2) : C 동적 메모리 할당 코드 분석 및 구동 방식 파악

오늘은 malloc() 함수를 실제 구현해 보는 과정을 진행하기 위한 초석이다. 더 성능 좋은 malloc으로 구현하기 위해 책에 구현된 코드의 define 문과 함수를 전부 분석하고, 책의 어떤 방식을 채택하여 구현되어 있는지 확인해본 뒤 어떻게 개선할 수 있을지 여부를 판단하겠다. CS:APP 9.9 코드 예제 해석 먼저 코드의 내부 시스템 코드인 memlib.c 와 Define 문으로 정의된 코드부터 파악해보자 - memlib.c 해당 파일은 시스템 자원인 heap의 시작 pointer , heap이 현재까지 할당된 end pointer , heap의 최대 끝 end pointer를 기억하고 있다. 해당 데이터는 각각 mem_heap , mem_brk , mem_max_addr에 저장되어 있고, 해..

Jungle 2023.11.10

[TIL] 5주차 - (1) : C 프로젝트 : malloc() 동적 할당 구현 시작

5주차가 시작되었다. 근 2일 동안 CSAPP 책 독서 진도에 집중하느라 블로그 작성을 잘 못했는데, 다시 열심히 해보자. 5주차 발제 내용 일단 저번주에 9장 이론을 공부했기 때문에 무엇을 해야 될지는 대충 감이 온다. 먼저 오늘부터 구현을 시작해서 메모리 단편화를 해결하는 여러 방법의 경우의 수를 모두 구현해서 비교해보고 점수가 제일 높은 코드로 제출하려고 한다. 그후 메모리에 대한 필요한 지식이 생기면 CS 책을 통해서 공부를 더 하는 방향으로 이번주를 진행하려고 한다. declairation VS definition declariation은 아래 코드처럼 소스 파일 최 상단에 함수들의 이름들을 나열하는 선언부를 말한다. C에서 declariation을 하는 이유는 컴파일러가 코드를 위에서 아래로 ..

Jungle 2023.11.09

[TIL] 4주차 - (5) : RB-tree 구현 / 포인터의 모든 궁금증들

오늘은 작성한 내용이 많아 목차를 작성해 놓겟다. 1. 변수의 const 설정 2. Call by value / Call by reference 3. 포인터에 대한 궁금증 1. 포인터란 무엇인가? 2. 포인터는 왜 사용하는가? 3. 이중 포인터 4. 포인터를 사용할 시 주의점 변수의 const 설정 RB tree 를 구현하다보니, const를 사용한 변수에서 const를 사용한 이유가 궁금해져 const에 대해서 공부해 보았다. const는 '변함없는' 이라는 의미가 있는 constant의 약자로, 변수 앞에 붙이면 선언 이후 값을 변경하지 못하도록 하며 해당 변수를 상수로 취급하게 된다. 그럼 이 const는 왜 쓰는 걸까? 바로 변수의 선언과 동시에 그 초기 값을 변하지 못하도록 할 때 사용할 수 있..

Jungle 2023.11.06

[TIL][Krafton Jungle] 4주차 - (4) : 스터디 리뷰 & 세그멘트 폴트 문제 해결

오늘은 코알라(코딩 알고리즘 라이브) 스터디를 처음 시작한 날이다. 스터디에서 푼 문제에 대한 리뷰와 세그멘테이션 폴트를 해결한 내용을 작성하겠다. 코알라 스터디 코딩 알고리즘 공부를 계속하고 싶어서 정글 교육생들과 함께 스터디를 만들었다. 매주 일요일에 3문제씩 실제 코테처럼 응시한 뒤, 각자 본인이 문제에 대한 접근법을 설명하는 방법이다. 알고리즘 문제 푸는 능력을 빠르게 키우는 건, 잘 하는 사람들의 문제 접근 방법을 들여다 보는 것이라 생각한다. 그래서 알고리즘에 익숙한 사람들과 같이 어떻게 접근했는지 방법을 들어보면서, 내 실력도 빠르게 키울 수 있었으면 좋겠다. 그리고 또 알고리즘 실력이 부족하다고 생각되서 참여하기가 꺼려지는 분들은 점수 매기는 거 아니니까 많이 들어와서 같이 실력 키워봅시다..

Jungle 2023.11.05

[TIL][Krafton Jungle] 4주차 - (3) : RB Tree 공부 및 실제 구현

오늘은 RB 트리의 삭제 연산과 구현을 실제로 진행해보겠다. 그전에 make 파일에서 발생한 오류부터 해결해 보자. Segmentation fault 세그멘테이션 폴트(Segmentation fault)는 프로그램이 잘못된 메모리 주소에 접근하려고 할 때 발생하는 오류이다. 이는 일반적으로 배열의 범위를 초과하거나 널 포인터를 참조하는 등의 상황에서 발생할 수 있다. 현재 RB 트리의 선언, 단일 노드의 삽입과 탐색, 삭제까지 구현을 마치고 올바르게 작동 된다는 것을 확인했다. 근데 test_find_erase() 함수에서 for문으로 arr[i]의 값들을 각각 insert하는 상황에서 Segmentation fault가 발생한 상황이다. 문제는 이 함수를 진입하지도 못하고 있는 상황이라는 것이다. 아마..

Jungle 2023.11.04