상세 컨텐츠

본문 제목

Week 5. Malloc Lab 주차 회고

일상기록장/크래프톤 정글 일지

by hyuga_ 2023. 11. 16. 16:36

본문

5주차 끝! 이번주도 재미있었다.

갈수록 규모가 큰 프로젝트 파일을 다루고 있는데, 마치 복잡한 기계의 어느 한 부품을 고치면 전체가 살아움직이는(?) 그런 미묘한 카타르시스가 느껴진다. 다만 아직 디버거를 사용하는 법에 익숙하지 않아서 시간 나면 한번 익히고 넘어가야 될 것 같다. 

 

돌아오는 주는 Proxy lab 이다.

지금껏 컴퓨터 내부만 뜯어보다가, 컴퓨터 간의 연결로 세계관이 확장되는 순간이다. 

네트워크에 대해서는 아직 아는 바가 없어서, 초반 며칠은 개념 공부에 더 집중해야 할 것 같다. 

 

이번주도 기대중!


이번주 배운 것

  • 가상메모리
  • 메모리 관리 기법 (특히 페이징)
  • 메모리 단편화
  • 동적 메모리 할당기의 내부구조 
    • 힙, sbrk, malloc, free
    • implicit free list, explicit free list
    • 메모리 할당 정책 (first fit, next fit, best fit)

 

이번 주차는 지난주에는 완성된 함수로 다루기만 했던 malloc(), free()등 동적할당의 내부 원리를 공부하는 한 주였다.

저장장치들이 가진 특징과 제약, 그리고 이를 극복하기 위해 소프트웨어적으로 어떤 기법을 사용했는지(가상메모리)를 공부했고, 

 

가상주소공간의 구조(힙, 스택, 데이터, 코드 영역)와 CPU가 이를 어떻게 처리하는지,

또 개발자가 힙 영역을 다루고자 할 때 장치 내부에서 어떻게 이 요청을 처리하는지를 조금이나마 엿볼 수 있었다. 

 

확실히 예전 버릇이 있어서 그런지 반도체 관련 얘기가 나올 때마다 눈이 조금 더 번뜩이는 건 어쩔 수 없었다ㅎㅎ

많이 까먹긴 했지만 가끔 기억나는 내용이 나오면 괜히 반갑고 그랬던.. ^-^

 

개인 목표 체크

1. 매주 과제 완수율 90% 이상 달성하기
    (!! 미니프로젝트 제외하고, 정글 생활하면서 처음으로 90%를 달성했다.😭😭 딱 90 턱걸이!)
2. 주 3회 이상 운동하기
3. 공부 내용 기록하기
4. 주 3회 이상 알고리즘 ✅

 

알고리즘 목표를 스터디 참여에서 주 3회 이상 풀기로 바꿨다. 

물론 스터디 참여를 하긴 하지만, 참여 여부보다는 꾸준히 풀고 있는지를 체크하는 게 더 목적에 부합하다고 생각하기 때문이당

 

 

 

 

5주차 퀴즈 문제

  1. 페이징과 세그멘테이션의 1) 정의, 2) 각각의 장단점에 대해 서술하시오.
  2. first-fit, next-fit, best-fit의 작동 방식
  3. DMA의 기본 개념을 설명하고, DMA가 시스템 성능에 미치는 이점을 두 가지 이상 제시하시오.
  4. 힙 정렬의 배열 표현 ([1 2 4 4 3 5 5 6]에 힙 정렬을 수행했을 때, 과정을 배열로 표현하기)
  5. 아래 코드의 실행 결과를 적어보시오.
#include <stdio.h>

int main() {
	
    char* str[2];	
    str[0] = "hello!";
    str[1] = "jungler";
    printf("1. %s\n", str[0] + 1);
    printf("2. %s\n", (str + 1)[0] + 2);
    
    return 0;
}

 

 

 

 

 


5번 문제는 특히 포인터 개념을 이해하는데 중요한 문제인 것 같아서 5번의 풀이만 조금 적어두면,

 

 

정답은 

"1. ngler"

"2. ello!"

이다. 

 

C에서 문자열을 저장할 때는 항상 문자열 끝에 null 문자를 함께 넣는다. 

char[20] 이런 식으로 크기를 정해놓는게 아니라면, 문자열(%s) 출력 시 시스템이 어디까지 읽어야할지를 알 수 없기 때문이다. 

따라서 null 문자가 문자열의 끝임을 알려주는 flag 역할을 해준다. 

 

만일 이 문제에서 printf 출력 타입을 %c로 지정했다면 정답은 "1. n", "2.e" 였을 것이다. 

그러나 %s 타입으로 출력했기 때문에, printf 함수는 null 문자를 만날 때까지 출력한다. 

 

 

 

관련글 더보기