전체 글 96

[크래프톤 정글] 동적 메모리 할당기 총정리

동적 메모리 할당기 총정리동적 메모리 할당기는 프로그램 실행 중에 필요에 따라 메모리를 동적으로 할당하고 해제하는 시스템이다. 이 메모리 관리 방법은 고정된 크기의 메모리 할당이 아닌, 동적인 메모리 사용을 허용하며, 프로그램의 유연성을 높인다. 동적 메모리 할당기를 구현하는 방법은 여러 가지가 있으며, 각각의 방식은 메모리 사용 효율성, 성능, 단편화 문제 등에 대한 다른 접근 방식을 제공한다.1. 동적 메모리 할당기의 개념동적 메모리 할당기는 다음과 같은 핵심 기능을 수행한다:할당(allocation): 필요한 크기만큼 메모리 블록을 할당하고, 이 블록의 주소를 반환한다.해제(deallocation): 사용이 끝난 메모리 블록을 해제하고, 해당 블록을 가용 메모리로 다시 돌려놓는다.프래그멘테이션 관리..

cs 2024.10.16

[크래프톤 정글] 컴퓨터 시스템 hello.c 실행 전체 플로우 정리

우리가 프로그램을 실행하기까지의 전체 과정을 설명하면, 먼저 hello.c 파일을 작성한 후 빌드를 시키면 다음과 같은 과정들이 차례대로 진행된다.1. 전처리 과정헤더 파일 확장: #include로 포함된 헤더 파일들이 실제 코드로 확장된다.매크로 확장: #define으로 정의된 매크로가 코드에 삽입된다.주석 제거: 소스 코드 내 모든 주석이 제거된다.이 과정을 통해 전처리가 완료되며, 그 결과물은 .i 파일로 저장된다.2. 컴파일 과정구문 분석: 소스 코드의 문법을 검사하여 파싱한다.구문 트리 생성: 구문 트리를 생성하여 코드의 구조를 분석한다.중간 표현(IR): 구문 트리를 기반으로 중간 표현(Intermediate Representation)으로 변환된다.어셈블리 코드 생성: 중간 표현을 기반으로 ..

cs 2024.10.16

[크래프톤 정글] 동적 메모리 할당(CSAP 9.9장)

CSAPP 9.9장은 동적 메모리 할당에 관한 다양한 기법과 문제들을 다루고 있으며, 특히 malloc과 free 같은 C의 기본 메모리 관리 함수와 관련된 동작 원리와 구현 방식을 정리 해보고자 한다. 9.9.1 malloc과 free 함수malloc 함수는 동적으로 메모리를 할당하고, free 함수는 그 메모리를 해제하는 기본적인 함수이다.예시:#include #include int main() { int *arr = (int *)malloc(5 * sizeof(int)); // 5개의 정수 공간 할당 if (arr == NULL) { printf("메모리 할당 실패\n"); return 1; } for (int i = 0; i 이 예시는 malloc을 ..

cs 2024.10.14

[크래프톤 정글] c프로그래밍에서의 고통된 메모리 관련 버그(CSAP 9.11장)

다음은 CSAPP 9.11장에서 설명된 메모리 관련 버그들에 대한 설명과 각 상황에 대한 예시를 들어 정리 해보고자 한다.9.11.1 잘못된 포인터 역참조잘못된 포인터를 역참조하면 가상 메모리의 잘못된 위치를 참조하게 되어 프로그램이 비정상 종료된다.예시:int *ptr = NULL;*ptr = 100; // NULL 포인터 역참조, 프로그램이 종료됨위 코드는 NULL 포인터를 역참조하려고 하기 때문에 실행 중에 프로그램이 크래시된다.9.11.2 초기화되지 않은 메모리 읽기초기화되지 않은 메모리를 읽으면 해당 메모리에는 쓰레기 값이 포함될 수 있다.예시:int *arr = (int *)malloc(5 * sizeof(int));printf("%d\n", arr[0]); // 초기화되지 않은 메모리 읽..

cs 2024.10.14

2~3주차 회고

이 글을 쓰는 시점은 이제막 3주차가 끝난 시점이다. 사실 2,3 주차 는 1주차 와 똑같은 생활의 연속이었기에 2,3 주차 회고 를 같이 쓰려한다.알고리즘2~3 주차 통틀어 bfs, dfs, dp , 그리디 알고리즘 등을 다루며 알고리즘에서 가장 기초가 되고 중요한 개념들을 익혔던 2주 였는데 그만큼 그 어떤 것 하나도 쉽게 가는 법이 없었다. dfs , bfs는 좀만 익숙 해질만 하면 응용 문제들이 나왔고 , dp 에서는 분명 점화식 을 찾는 감만 잡으면 될거 같았는데 문제만 보면 머리가 하애지는 하루들의 연속 이었다. 한가지 얻은게 있다면 확실히 풀면 풀수록 스스로 알고리즘에 대해 익숙해지고 있다는 것을 느끼게 되었고, 많이 풀어보며 많은 문제 익숙 해지는것이 유일한 방법이라는 것을 알게 되었다. ..

크래프톤 정글 2024.10.14

[크래프톤 정글] 시그널(CSAP 8.5장)

8.5 시그널(Signals) - 상세 설명시그널은 소프트웨어 기반의 예외적 제어 흐름의 한 형태로, 프로세스에 특정 이벤트가 발생했음을 알리는 간단한 메시지이다. 시그널은 운영체제가 외부 이벤트나 오류를 프로세스에 통지하는 방법으로 사용되며, 프로세스는 시그널을 받으면 이에 대한 적절한 처리를 수행할 수 있다. 시그널의 기본 개념시그널 전송: 시그널은 커널이나 다른 프로세스에 의해 생성되어, 대상 프로세스에 전송된다.시그널 대기 및 처리: 시그널이 프로세스에 도착하면, 커널은 해당 프로세스에 시그널을 전달하고, 해당 시그널이 처리되기를 기다린다.시그널 처리기: 시그널을 처리하기 위해, 프로세스는 시그널을 무시하거나, 기본 동작(프로세스 종료 등)을 수행하거나, 또는 시그널 핸들러를 통해 시그널을 처리할..

cs 2024.10.12

[크래프톤 정글] 예외상황(CSAP 8.1장)

8.1 예외(Exception) - 상세 설명예외는 프로그램의 실행 중에 정상적인 제어 흐름을 방해하는 예기치 않은 사건이 발생할 때 나타나는 현상이다. 이러한 예외는 하드웨어나 소프트웨어 모두에 의해 발생할 수 있으며, 시스템은 이를 처리하기 위해 제어 흐름을 변경하여 예외 처리 코드를 실행한다. 이 과정은 컴퓨터 시스템에서 중요한 개념인 예외적인 제어 흐름(ECF: Exceptional Control Flow)를 이해하는 데 핵심적인 역할을 한다.예외 처리의 개념프로세서는 예외가 발생하면 즉시 현재 실행 중인 명령어의 실행을 중단하고, 특정 예외 처리 루틴을 호출한다. 이 루틴은 발생한 예외를 처리한 뒤, 필요에 따라 원래 프로그램으로 돌아가거나, 프로그램을 종료할 수 있다. 예외 처리는 시스템의 핵..

cs 2024.10.12

[크래프톤 정글] 재배치 가능 목적 파일(CSAP 7.4장)

7.4 재배치 가능 오브젝트 파일 (Relocatable Object Files)재배치 가능 오브젝트 파일은 컴파일된 프로그램의 기본 단위로, 여러 소스 파일에서 생성된 오브젝트 파일들을 링크하여 하나의 실행 파일을 만들기 위해 사용된다. 각 오브젝트 파일은 기계어 코드와 데이터, 메타데이터(심볼 테이블)를 포함하고 있으며, 이 파일들은 링킹 과정에서 결합되어 최종 실행 파일을 생성한다. 이 재배치 가능 오브젝트 파일의 주요 기능은 프로그램을 재배치할 수 있도록 설계되어 있다는 것이다.재배치 가능 오브젝트 파일의 각 섹션은 실행 시점에 특정 메모리 주소에 고정되지 않으며, 링커에 의해 실제 실행 시 필요한 주소로 "재배치"될 수 있다. 이를 통해 여러 모듈(소스 파일)을 독립적으로 컴파일하고, 링커가 나..

cs 2024.10.11

[크래프톤 정글] 컴파일러 와 링커(CSAP 7.1장)*

컴파일러 드라이버는 여러 단계를 통해 소스 코드를 실행 파일로 변환하는데,각 단계는 서로 밀접하게 연결되어 있으며, 이 과정에서 각각의 파일이 중간 산출물로 생성된다.1. 전처리 단계 (Preprocessing)전처리 단계에서는 전처리기(cpp)가 동작하여 소스 파일의 전처리 지시문을 처리한다. 이는 컴파일 프로세스의 첫 단계로, #include, #define, #if, #ifdef와 같은 전처리 지시문을 해결한다.주요 작업:헤더 파일 확장: #include 지시문에 의해 포함된 헤더 파일들은 소스 파일에 삽입된다. 예를 들어, #include 는 해당 헤더 파일의 전체 내용을 소스 코드에 삽입하는 과정이다.매크로 확장: #define으로 정의된 매크로들은 실제 코드에서 사용될 때 해당 값으로 대체된다..

cs 2024.10.11