2005년에 출판된 책이다. 현재 사정과 많이 다를 수도 있다.
2장 Back to the Basic, 기본으로 돌아가기
ASCIZ 문자열
- 문자열 끝을 Z = 0 로 표시하는 문자열
- n^2 효율
gist:ppzxc/ff4c544c4ebaa6059bc825e6b0ad20e0#ASCIZ.c
- 선형 효율
gist:ppzxc/ff4c544c4ebaa6059bc825e6b0ad20e0#IntelliStrcat.c
파스칼 문자열
- 문자열의 시작점에 바이트 길이를 표시
- 파스칼 문자열은 255Byte로 길이 제한. 바이트에 들어가는 가장 큰 숫자가 255.
기억 공간 할당 문제
- 정확하지 않은 공간 할당은 오버 플로우 유발.
- 한때 오버 플로우는 해킹의 기본 기술..
Malloc
- 사용 가능한 메모리 블록을
liked list
로 길게 연결한자유 체인 free chain
. [자유 체인..?]
Malloc 동작
- malloc은 리스트를 따라가며, 요청한 메모리 양보다 큰 블록을 찾는다.
- 찾은 블록을 2개로 쪼개 하나는 호출자에게 반환, 하나는 다시
liked list
에 넣어 놓는다. - free를 호출할 때, free는 해제한 메모리를 자유 체인에 추가한다.
- 결국 자유 체인은 자그마한 조각으로 잘게 쪼개지고, 단편화를 유발한다.
- 이럴경우 원하는 메모리 크기가 없을때가 있는데, 이땐 malloc이 타임아웃?을 선언하고 자유 체인의 작은 조각을 모두 정렬하고 인접한 자유 체인의 블록을 큰 블록으로 결합한다.
2배수 메모리 블록 할당
- 잠재적 혼란을 최소화 하기 위해 4, 8, 16 바이트로 할당한다.
- 자유 체인에서 생기는 단편화를 상당히 줄여준다.
- 50% 이하로 기억공간을 소비한다?
RDB가 SELECT author FROM books
를 구현하는 방법
- RDB의 books 테이블 내부의 모든 열 바이트 크기는 같다.
- 모든 필드는 항상 열의 시작에서 고정
offset
으로 찾을 수 있다. - 예를 들면, books 테이블에서 각 레코드가 100 바이트 크기를 가지고 있고, author 필드의 오프셋이 23이면, author 필드를 23, 123, 223, 323 바이트 위치에 저장한다.
- 여기서, 다음 레코드로 옮기는 코드는?
pointer += 100;
2장 끝으로
- 전산 신입생은 CPU부터 시작해 C를 활용하는데 까지 차곡 차곡 기초를 닦아라.
- 하양 평준화된 러시아 페인트공 알고리즘 생산자가 되지 말자..?허허..
- 문자열이 무엇인지 깊은 단계에서 이해하지 못하는 사람이 된다.
예전부터 해오던 생각이지만, 아주 어렷을적 window 97에 rpg maker라는 게임 만들기 프로그램으로 게임을 만든적이 있는데, 그때 블루 스크린을 너무나도 많이 봐왔다. 그때 문득 블루 스크린이 왜뜨는지, 궁금했었지만 알길이 없었다. 그때와 지금은 아주 많이 달라졌다. 하드웨어는 차고 넘칠만큼 빠르고 Java처럼 사용자가 편하게 사용하는 언어를 바탕으로 나 또한 코드만 찍어내는 코더가 되었다. 어느 선 까지는 이렇게 성장해도 올라 갈 수 있겠지만, 깊은 곳을 충분히 이해하지 못하면 그 허들을 넘지 못할거라는 걸 어렴풋이 알고 있었다. 학부시절 나를 끔찍히 괴롭힌 C와 C++이지만, 다시끔 C를 공부해야될 이유가 생겼다.