본문 바로가기

SW사관학교 정글25

[Web proxy-lab] tiny server, proxy 구현 Study for Web-proxy in Notion Web-proxy lab CS:APP 11장 네트워크 프로그래밍 choidabom.notion.site Source code Web-proxy in Github GitHub - choidabom/webproxy-lab: WEEK07: tiny webserver, proxy WEEK07: tiny webserver, proxy . Contribute to choidabom/webproxy-lab development by creating an account on GitHub. github.com 2022. 11. 10.
[C언어와 친구들] int argc와 char *argv[]란? WEEK07에서 tiny server가 실행되는 main 함수가 int main(int argc, char **argv){} 다음과 같이 구성되어있었다. 정확히 argc와 argv가 어떤 인자인지 알기 위해 쓰는 글이다. main함수를 포함한 모든 함수에는 인수(파라미터)를 지정할 수 있다. main 함수의 매개변수는 보통 아무것도 사용하지 않지만 다음 모양과 같은 모양으로 쓰일 수 있다. int main(void){ // 중략 } or int main(int argc, char *argv[]){ // 중략 } int main(int argc, char *argv[]) 함수에서는 윈도우나 리눅스 같은 OS 명령 프롬포트를 이용해 인자를 전달해서 작동할 수 있도록 한다. c언어에서 main 함수는 프로그램.. 2022. 11. 9.
[Malloc-lab] 동적 메모리 할당기(Dynamic Memory Allocator) 이해 과정 ※ 이 글은 Why(왜)와 ?(물음표)를 바탕으로 작성한 글입니다. ※ ※ 이해의 과정을 나열한 것이기 때문에 순서대로 천천히 읽는 것을 추천합니다. ※ 목차 1. Dynamic Memory Allocation을 하는 이유 2. Dynamic Memory Allocator는 어떤 역할을 하기에 중요한가? 3. Dynamic Memory Allocator는 어디에서 memory를 가져와서 할당해주고, 반납해주는가? 4. 할당기와 가용리스트 확실히 하기 (명시적 vs 묵시적) 5. Dynamic Memory Allocator를 만드는 이유 👩‍💻 6. Dynamic Memory Allocator를 실제로 구현할 때 어떤 것들을 중요하게 고려해야하는가? 7. Dynamic Memory Allocator 만들기.. 2022. 11. 2.
[Malloc-lab] malloc, calloc, realloc, free, brk, sbrk, mmap 기본 개념 정리 💡malloc, calloc, realloc, free, brk, sbrk, mmap💡 1. malloc() 함수 원형 : void *malloc(size_t size) 기능: 메모리 동적 할당 헤더: 매개변수: size_t size 메모리의 크기 리턴값: 성공 => 할당한 메모리의 첫 번째 주소, 실패 => NULL #include void *malloc(size_t size); // Returns: pointer to allocated block if OK, NULL on error int *arr; arr = (int *)malloc(sizeof(int)*5); // 배열 5개, 총 20바이트로 할당함 2. calloc() 함수 원형 : void *calloc(size_t count, size_t .. 2022. 11. 2.
[Malloc-lab] 가상메모리(Virtual Memory) 동적 메모리 할당 개념에 들어가기 앞서, 가상메모리가 무엇인지는 알고 들어가야할 것 같다. Q. 가상메모리가 무엇인가? 단순한 임베디드 마이크로컨트롤러와 같이 가상 메모리 기술을 사용하지 않는 시스템에서는 메모리 참조 방식이 아래 왼쪽 그림과 같다. 즉, CPU가 물리 주소를 메인 메모리에 바로 입력하여 메모리 참조를 진행하는 것이다. 반면 대부분의 현대 데스크탑, 서버, 노트북과 같이 가상 메모리 기술을 사용하는 시스템에서는 메모리 참조 방식이 아래 오른쪽 그림과 같다. 요즘 통상적으로 컴퓨터의 메모리는 8GB 혹은 16GB이다. 리눅스의 경우 하나의 프로세스가 4GB인데, 실제로 각각의 프로세스에 이만큼의 메모리를 할당하기에는 실제 메모리 크기에 한계가 있다. 프로세스를 실행하기 위해서 코드는 반드시.. 2022. 10. 28.
[WEEK05] 개발일지 (부제: 🔴⚫🌳) 어쩌다 보니 홀수차에만 적게 되는 개발일지가 되어버렸다. 저번주(WEEK04)는 알고리즘 주차를 마무리했고, 카톡 사태로 인해 티스토리도 터져버렸고 나의 멘탈도 함께 터져버렸다. 보통의 기록을 티스토리에서 시작하여 마무리를 짓는 편인데 그러지 못한 점에서 멘붕이 왔었던 것 같다. 만일의 사태에 대한 대비가 없었던 것 같다. 잠시 노션으로 갈아탔다가, 노션 앱의 유용성과 가시성에 반하였지만 다시 티스토리로 돌아왔다. 요즘 디스플레이의 구글창이 소멸할 정도의 정보의 바다 속에서 살고 있다. 구글 창이 그렇게 CPU 점유율이 높아서 CW 오빠는 최대 10개를 킨다고 하는데 난 지금 글을 쓰는 시점에도 3개의 구글 창에 십 몇 개의 구글 창들이 존재한다. 구글링을 하는 과정에서 옳은 정보를 찾고, 그 정보를 적.. 2022. 10. 28.
[Malloc-lab] 메모리 영역(데이터 세그먼트) 코치님에게 csapp를 읽으면서 스택과 힙에 할당되는 부분에 관해 아직 헷갈리는 부분이 있다고 의도치 않은(?) 고백을 해버렸고 다시 질문이 날라왔다. '그럼 지역변수와 전역변수가 할당되는 곳은 어디에요?' 대답은 했지만 말끔하게 못한 것 같다.. 아직 머릿속에 정확하게 정리가 안 된 것 같아 정리하는 글이다. 메모리 영역은 어떻게 구성되어 있는가. Q. 프로세스 메모리 영역은 어떻게 구성되어 있는가? 프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당해준다. 할당되는 메모리 공간은 크게 코드(Code), 데이터(Data), BSS, 힙(Heap), 스택(Stack)영역으로 나뉘어진다. 코드(Code) 영역 - 실행할 프로그램의 코드가 저장되는 영역으로 Text 영역이라고.. 2022. 10. 28.
[C언어와 친구들] 이진 탐색 트리 (BST) 이진탐색트리(Binary Search Tree, BST)란? - 모든 원소는 유일한 키 값을 갖는다. (중복 내용을 갖는 항목은 없다.) - 왼쪽 서브트리의 모든 원소들은 루트의 키보다 작은 값을 갖는다. - 오른쪽 서브트리의 모든 원소드른 루트의 키보다 큰 값을 갖는다. - 왼쪽 서브트리와 오른쪽 서브트리도 이진탐색트리이다. (재귀적으로 정의) 이진 탐색 트리에서 3가지 연산: 탐색/삽입/삭제 1) 탐색 루트 노드를 주고서 우리가 찾고 싶은 x라는 key 값을 찾는다. search(root, x) x를 root 값부터 비교해가면서 root 보다 크면 오른쪽 서브 트리를, root 보다 작으면 왼쪽 서브트리를 방문한다. 만약 x가 roo값과 같으면 바로 root를 반환한다. search 함수를 만들어보자.. 2022. 10. 24.
[C언어와 친구들] 구조체(Struct)의 멤버가 포인터일 때, 구조체 포인터 변수 선언(동적메모리할당) 구조체 포인터가 왜이렇게 헷갈릴까. 다시 복습. - 포인터란 특정한 데이터가 저장된 주소값을 보관하는 변수 - 즉, 포인터도 변수다! 구조체 포인터도 마찬가지이다. - 구조체를 가리키는 포인터를 구조체 포인터라고 한다. - 즉, 구조체 포인터도 변수다! int형 포인터는 int *ptr1; 형식으로 선언했다. 여기서, 구조체는 struct [구조체 이름]이 자료형이다. struct [구조체 이름]형 포인터는 struct student *ptr2; 형식으로 선언했다. 여기서 struct가 있기 때문에 ptr2가 구조체라고 착각할 수 있지만 😵‍💫 ptr2는 구조체를 가리키는 포인터일 뿐 절대 구조체가 아니다. 💡💡💡💡💡💡💡 구조체를 가리키는 포인터로서 일반적인 포인터의 사용 방법이 비슷하지만, 구조체 멤버.. 2022. 10. 24.