부록 Q — 표와 그림 목록
이 책의 표와 그림을 번호순으로 모았다. 번호·제목·쪽수는 사람이 적은 것이 아니라 본문에서 그대로 뽑아낸 것이므로, 본문이 바뀌면 이 목록도 함께 바뀐다. PDF 에서는 번호를 누르면 그 표나 그림으로 뛴다.
표#
- 표 0.1 — 처음인 사람의 걸음
- 표 0.2 — 다시 배우는 사람이 먼저 볼 곳
- 표 2.1 — 자연수 기수 셋의 표현 효율 비교
- 표 2.2 — 작은 수에서는 3진법이 이기기도 한다
- 표 2.3 — 기수가 커질수록 좁아지는 전압 준위 간격
- 표 2.4 — 무엇을 세느냐에 따라 갈리는 「가장 효율적인 기수」
- 표 4.1 — 널을 읽는 두 층 — 소스의 표기와 기억의 표현
- 표 5.1 — 기억의 네 구역과 그 성격
- 표 5.2 — 정적·스택·힙을 가르는 축들
- 표 5.3 — 이 장의 말과 표준의 말
- 표 5.4 — 이 밑그림이 통하지 않는 기계들
- 표 5.5 — 네 구역이 다시 돌아오는 자리
- 표 7.1 —
float과double의 비트 나누기 - 표 7.2 — 지수의 양 끝이 맡은 특별한 값들
- 표 7.3 — 같은 수의 64비트 내부 표현
- 표 8.1 — ASCII 와 EBCDIC 이 같은 글자에 준 번호
- 표 8.2 — EBCDIC 알파벳이 끊긴 자리와 그 사이에 앉은 문자
- 표 8.3 — 손으로 적은 문자 판정과 라이브러리에 물은 것
- 표 8.4 — UTF-8 의 바이트 수별 비트 배치
- 표 8.5 — 표준이 문자 집합에 붙인 이름들
- 표 8.6 — 문자 집합이 바뀌는 번역 단계
- 표 8.7 — C23 이 정리한 인코딩의 이름
- 표 8.8 — 문자열 리터럴의 접두어와 그 보장
- 표 10.1 — 운영체제가 프로세스에게 주는 것
- 표 10.2 — 프로세스가 놓이는 상태
- 표 10.3 — 두 개의 모드
- 표 10.4 — 프로그램과 프로세스 — 기억할 것
- 표 11.1 — 「언제 끊을 것인가」의 후보들
- 표 11.2 — 일을 번갈아 하는 방식들
- 표 11.3 — 전환할 때 옮겨야 하는 것
- 표 11.4 — 시계 인터럽트가 하는 일
- 표 11.5 — 바이트 하나를 보내는 두 가지 방법
- 표 11.6 — 바깥의 일을 알아채는 두 가지 방법
- 표 11.7 — 인터럽트가 일어나는 차례
- 표 11.8 — 인터럽트가 여럿일 때 생기는 일
- 표 11.9 — 장치가 여는 창구들
- 표 11.10 — 인터럽트가 겹칠 때 코드가 쓰는 다섯 가지 방법
- 표 11.11 — 인터럽트와 멀티태스킹
- 표 11.12 — 도스 시절, 인터럽트가 하던 일
- 표 11.13 — 이 장의 개념이 이어지는 곳
- 표 12.1 — 기억의 사다리 — 층별 크기와 대기 시간
- 표 13.1 — 이 책이 말하는 회색지대와 그렇지 않은 것
- 표 13.2 — 회색지대 관행과 그것을 다루는 자리
- 표 13.3 — 회색지대를 피할 이유가 커지는 물음들
- 표 13.4 — 회색지대를 다루는 사다리
- 표 13.5 — 표준의 태도와 그 대신의 약속
- 표 13.6 — 회색지대를 쓸 때 남기는 기록
- 표 16.1 — 터미널·셸·프롬프트 — 낱말 정리
- 표 16.2 — 터미널과 셸이 하는 일의 차이
- 표 16.3 — 지금 쓰는 셸을 확인하는 법
- 표 16.4 — 첫날에 쓰는 셸 명령
- 표 16.5 — 상황별로 치는 키
- 표 16.6 — 경로를 적는 갈래
- 표 16.7 — 컴파일러별 첫 빌드 명령
- 표 16.8 — 같은 일을 시키는 컴파일러별 옵션
- 표 17.1 — 컴파일 단계별로 나오는 오류의 갈래
- 표 18.1 — 설치 없이 쓰는 웹 도구
- 표 18.2 — 문자 집합을 정하는 컴파일러 옵션
- 표 18.3 — 한글이 깨지는 네 고리
- 표 18.4 — 자주 쓰는 gdb 명령
- 표 19.1 — 이 장에 나오는 줄임말
- 표 19.2 — 현역 C 컴파일러의 지금
- 표 19.3 — GCC 와 Clang 을 두고 자주 오가는 말
- 표 19.4 — Win32 의 강점과 그 대가
- 표 19.5 — 툴체인에 들어 있는 것
- 표 19.6 — 컴파일러 이름에 얽힌 사정
- 표 19.7 — 컴파일러별 공식 자료
- 표 19.8 — 임베디드 컴파일러 한 줄 정리
- 표 21.1 — 정수 상수를 적는 진법
- 표 21.2 — 정수 상수의 접미어
- 표 21.3 — C23 자리 구분자가 되는 자리와 안 되는 자리
- 표 21.4 — 문자 상수의 접두어와 타입
- 표 21.5 — 이스케이프의 갈래
- 표 21.6 — 부동소수점 상수의 접미어
- 표 21.7 — 문자열 리터럴의 접두어와 인코딩
- 표 21.8 — 상수처럼 보이는 것들의 정체
- 표 21.9 —
const int가 걸리는 자리 - 표 21.10 — 네 가지 「상수」와 그 결핍
- 표 21.11 —
constexpr를 쓸 수 있는 자리 - 표 21.12 — 값이 정확히 담기지 않을 때 두 컴파일러의 반응
- 표 23.1 — 서식 지정의 빈칸과 그 이름
- 표 23.2 — 첫날에 쓰는 서식
- 표 23.3 — 출력 함수 셋과 쓰는 자리
- 표 25.1 — 선언과 정의 — 무엇을 했나
- 표 25.2 — 원형을 어디에 두는가
- 표 25.3 — 함수에서 금지된 것과 그 까닭
- 표 26.1 —
fgets가 하는 약속 - 표 26.2 — 그릇 끝의 모습으로 읽는 입력의 결과
- 표 27.1 — 타입이 정하는 것
- 표 27.2 — 객체 타입과 함수 타입
- 표 27.3 — 불완전 타입이 못 하는 일
- 표 27.4 — 표준이 말하는 기본 타입
- 표 27.5 — 문자 타입 삼형제
- 표 27.6 —
bool을 정수 타입으로 두는 조항 - 표 27.7 — 표준이 묶어 부르는 타입의 이름
- 표 27.8 — 파생 타입 — 무엇에서 무엇이 나오는가
- 표 27.9 — 타입 한정자가 하는 약속
- 표 27.10 — 타입 한정자와 저장 클래스 지정자의 자리
- 표 27.11 —
const가 붙는 자리에 따라 달라지는 것 - 표 27.12 — 타입을 말하는 낱말과 그 모인 자리
- 표 27.13 —
<stdint.h>의 세 갈래 - 표 27.14 — 자리에 맞는 정수 타입 고르기
- 표 27.15 — 표준의 낱말과 정면으로 다루는 장
- 표 28.1 — 정수 타입이 보장하는 최소 범위와 한계 매크로
- 표 28.2 — 부동소수점 한계 매크로
- 표 28.3 — 접미어 없는 상수의 타입이 정해지는 순서
- 표 28.4 — 같은 값을 다르게 적었을 때의 실측 타입
- 표 28.5 — 넘침의 갈래
- 표 29.1 — 산술 연산자가 피연산자에 거는 조건
- 표 29.2 — 시프트의 상황별 판정
- 표 33.1 — 루프 3형제 — 조건을 보는 자리와 최소 실행 횟수
- 표 33.2 — 불변식을 확인하는 세 조각
- 표 33.3 — 불변식을 실무에서 쓰는 네 가지 방식
- 표 33.4 — 불변식이 잡아 주는 문제
- 표 33.5 — 선언한 자리에 따라 달라지는 수명
- 표 33.6 —
for첫 칸에 적을 수 있는 것 — 표준별·컴파일러별 - 표 33.7 — 조건 칸이 루프 변수를 건드릴 때
- 표 33.8 — 끝나지 않는 루프를 두고 컴파일러가 하는 일
- 표 33.9 — 루프를 겹칠 때 새로 생기는 실수
- 표 34.1 — 연산자의 갈래 한눈에
- 표 35.1 — 좌변값과 우변값 — 표준이 정한 관계
- 표 35.2 — 복합 대입에서 왼쪽이 평가되는 횟수
- 표 35.3 — 대입의 자리별 판정
- 표 35.4 — 대입과 부수효과 — 기억할 것
- 표 36.1 — 객체·주소·포인터가 각각 무엇인가
- 표 36.2 — 같은 수가 자리마다 다른 뜻이 된다
- 표 36.3 — 포인터를 다룰 때의 기본 규칙
- 표 36.4 — 포인터 사고를 잡는 빌드 옵션
- 표 36.5 — 플랫폼별 포인터 크기
- 표 36.6 — 포인터를 찍는 지정자
- 표 37.1 — 널 포인터 상수로 인정되는 표기
- 표 37.2 — 널을 다루는 층과 그 약속
- 표 37.3 — 널을 두고 C 와 C++ 이 갈리는 자리
- 표 38.1 —
void *와char *계열의 특권 비교 - 표 38.2 — 출처 모델이 들어오면 갈리는 관용구
- 표 39.1 — 원소가 붙어 있다는 사실에서 따라 나오는 것
- 표 39.2 — 포인터 산술의 네 가지 꼴
- 표 39.3 — 포인터가 낄 수 있는 연산과 없는 연산
- 표 39.4 — 금지된 꼴에 대한 GCC 의 대답
- 표 39.5 — 주소를 정수로 담는 세 타입
- 표 39.6 — 포인터 산술이 허용되는 범위
- 표 40.1 — 다차원 첨자식이 풀리는 단계
- 표 40.2 — 다차원 자료를 다루는 네 패턴
- 표 40.3 — 다차원 배열 — 기억할 것
- 표 41.1 — 배열과 포인터를 가르는 다섯 축
- 표 41.2 — 첨자 접근의 걸음 수 비교
- 표 41.3 — 선언이 어긋났을 때 벌어지는 일
- 표 41.4 — 배열이 포인터가 되는 세 규칙
- 표 41.5 — 무너지지 않는 자리
- 표 41.6 — 매개변수에서 한 겹만 바뀐다
- 표 41.7 — 같은 세 낱말, 두 가지 배치
- 표 41.8 — 무엇을 고치려는가에 따라 겹이 하나씩 는다
- 표 41.9 — 배열을 돌려주는 우회들
- 표 41.10 — 자리에 맞는 배열/포인터 고르기
- 표 41.11 — 배열과 포인터 — 기억할 것
- 표 42.1 — 같은 합, 다른 순서
- 표 42.2 — 여러 겹을 한 번에 벗는 장치 — 언어별
- 표 42.3 — 다중 루프를 빠져나오는 네 가지 방법
- 표 42.4 —
goto를 쓸 때의 규율 - 표 42.5 — 매크로 몸통의 세 가지 꼴
- 표 42.6 — 루프의 관용구와 그 주의
- 표 43.1 — 문자열 리터럴의 갈래와 크기
- 표 44.1 — 입력 함수별 성공을 아는 법과 걸리는 자리
- 표 45.1 — 표준이 나누는 네 축 — 저장 기간·유효범위·연결·이름 공간
- 표 45.2 — 저장 기간 넷과 그 수명
- 표 45.3 — 유효범위의 갈래
- 표 45.4 — 연결의 세 갈래
- 표 45.5 — 저장 클래스 지정자 일곱
- 표 45.6 — 저장 클래스를 둘 적을 수 있는 세 자리 (C23)
- 표 45.7 — 구역별로 사는 것과 그 수명
- 표 46.1 —
calloc이 약속하는 것과 하지 않는 것 - 표 46.2 —
malloc호출을 적는 두 표기 - 표 46.3 — 선언 없이 부를 때 컴파일러가 하는 말
- 표 46.4 — 해제에서 나오는 사고와 진단
- 표 46.5 — C++ 컴파일러가 같은 코드에 하는 말
- 표 47.1 — 멤버 타입별
{ 0 }이 채우는 값 - 표 47.2 — 무엇을 묻느냐에 따라 규칙이 갈린다
- 표 47.3 — 유연 배열 멤버가 있는 구조체를 옮기는 세 가지 방법
- 표 48.1 — 꼬리 패딩을 만드는 두 요구
- 표 48.2 — 구조체를 넘기는 세 가지와 그 값
- 표 48.3 — 구조체를 통째로 내보낼 때의 문제
- 표 48.4 — 익명 멤버의 꼴과 뜻
- 표 48.5 — 익명 멤버가 금지된 자리
- 표 48.6 —
container_of가 쓸모 있는 자리 - 표 48.7 — 구조체를 부리는 법 — 기억할 것
- 표 49.1 — 타입 펀닝의 방법과 C 에서의 판정
- 표 49.2 — 비값 표현 — 어디서 생기고, 만지면 어떻게 되는가
- 표 49.3 — 공용체의 크기와 정렬 규칙
- 표 49.4 — 비트 필드에서 구현이 정하는 것
- 표 49.5 — 조합형 한글의 비트 배치
- 표 50.1 — 수식이 가진 것
- 표 50.2 — 연산자 묶음별 결합 방향
- 표 50.3 — 우선순위 때문에 다르게 묶이는 자리
- 표 50.4 — 전위와 후위 증감의 차이
- 표 50.5 — 시퀀스 포인트를 정하는 표준의 문장
- 표 50.6 — 최적화 수준에 따라 갈리는 결과
- 표 50.7 — 같은 코드에 대한 C 와 C++ 의 판정
- 표 50.8 — 산술 연산자의 계약
- 표 50.9 — 비교 연산자의 계약
- 표 50.10 — 논리 연산자의 계약
- 표 50.11 — 비트 연산자의 계약
- 표 50.12 — 대입 연산자의 계약
- 표 50.13 — 멤버·첨자 연산자의 계약
- 표 50.14 — 그 밖의 연산자의 계약
- 표 50.15 — 자주 보는 수식의 판정
- 표 50.16 — 상수 수식이 요구되는 자리
- 표 50.17 — 미지정으로 남은 자리
- 표 50.18 — 구현이 정하는 자리
- 표 50.19 — 수식처럼 보이는 것들
- 표 50.20 — 수식과 연산자 — 기억할 것
- 표 51.1 — 아래 표에서 쓰는 글자
- 표 51.2 — 비트 하나를 다루는 다섯 가지
- 표 51.3 — 마스크 세 가지
- 표 51.4 — 자주 쓰는 관용구
- 표 51.5 —
<stdbit.h>가 이름을 준 것들 (uc·us·ui·ul·ull꼬리가 붙은 판도 있다) - 표 51.6 — 비트를 다룰 때의 수칙
- 표 51.7 — 비트 연산 언저리의 사고
- 표 51.8 — 컴파일러가 이미 아는 것 — 이 기계에서 확인
- 표 51.9 — 비트 연산이 실제로 쓰이는 자리
- 표 54.1 — 정의되지 않은 동작의 갈래와 표준의 태도
- 표 54.2 — 표준이 요구하는 것과 어겼을 때
- 표 54.3 — 흔한 UB 코드와 표준의 자리
- 표 54.4 — 「여기 오면 안 된다」를 적는 두 가지
- 표 55.1 —
main의 형태와 지위 - 표 55.2 — 프로그램을 끝내는 방법
- 표 55.3 — 종료 상태의 값과 뜻
- 표 55.4 —
main의 세 얼굴 — 기억할 것 - 표 57.1 — 분할 빌드의 단계
- 표 57.2 — 빌드별 산출물 크기와 내용
- 표 57.3 — ABI 가 정하는 것
- 표 57.4 — 구조체를 돌려주는 두 가지 길 (x86-64 System V)
- 표 57.5 — 같은 64비트 기계, 다른 약속
- 표 57.6 — 소스 호환인데 이진 호환이 아닌 변경들
- 표 57.7 — 링크가 쓰는 표와 간접의 모양
- 표 58.1 — 표준이 정한 네 가지 스코프
- 표 58.2 — 가림을 다루는 실무 규율
- 표 58.3 — 이름을 만드는 두 층의 규칙이 다르다
- 표 58.4 — 이름과 물건에 대한 세 가지 질문
- 표 59.1 — 네 이름 공간과 거기 사는 이름
- 표 59.2 — 이름을 정하는 세 축
- 표 59.3 — 이름 짓기 방침과 그 근거
- 표 59.4 — 가림을 잡는 옵션과 실측
- 표 59.5 — 예약된 이름의 범위
- 표 60.1 — 이름 충돌이 드러나는 때
- 표 60.2 — 실제 프로젝트의 접두어 규약
- 표 60.3 — 심볼 가시성을 다루는 플랫폼별 방법
- 표 60.4 — C++
namespace로 얻는 것과 치르는 것 - 표 60.5 — 선언별 심볼 종류(
nm) - 표 60.6 — 이름 규약과 그 근거
- 표 60.7 — 소스의 이름과 링커가 보는 이름
- 표 60.8 — 이름을 두고 들일 습관
- 표 61.1 — 매크로를 쓸 때의 규칙
- 표 61.2 — 번역 단계의 한국어 이름과 표준의 이름
- 표 61.3 — 번역 단계 ① ② — 무엇을 하는가
- 표 61.4 — 번역 단계 ③ ④ — 무엇을 하는가
- 표 61.5 — 번역 단계 ⑤ ⑥ — 무엇을 하는가
- 표 61.6 — 번역 단계 ⑦ ⑧ — 무엇을 하는가
- 표 61.7 — 번역 여덟 단계 한눈에
- 표 62.1 — 한 이름의 세 자리
- 표 62.2 — 호출식의 피연산자
- 표 62.3 — 원형을 둘러싼 규칙의 변화
- 표 62.4 — 인자와 반환값에 붙는 조율
- 표 62.5 — 같은 소스, 다른 순서 — 이 기계에서 잰 것
- 표 62.6 — 호출 언저리의 순서 규칙
- 표 62.7 — 호출 한 번의 다섯 걸음
- 표 62.8 — 레지스터를 지키는 책임
- 표 62.9 — 책상 위의 네 규약 — 이 기계의 컴파일러가 낸 것
- 표 62.10 — 32비트 윈도의 세 규약 —
int f(int,int)를 이 기계의 mingw 로 빌드해서 - 표 62.11 — 같은 한 줄이 여섯 기계에서 실려 가는 모습
- 표 62.12 — 구조체 하나를 넘길 때 — 컴파일러가 낸 것
- 표 62.13 — 같은 것을 적는 세 가지
- 표 62.14 — 호출 언저리의 사고
- 표 63.1 — 가변 인자에서 값이 진급하는 모습
- 표 63.2 — 가변 인자가 깨지는 방식
- 표 64.1 — 콜백 설계의 갈래와 표준과의 관계
- 표 64.2 — 범용 함수 포인터의 왕복
- 표 64.3 — 함수 포인터를 찍는 방법과 그 이식성
- 표 64.4 — 함수 포인터에 할 수 있는 일
- 표 64.5 — 콜백을 쓸 때의 규칙
- 표 65.1 — 선언을 읽는 데 쓰는 낱말
- 표 65.2 —
const가 붙은 선언을 읽는 법 - 표 65.3 — 선언을 이어 읽는 과정
- 표 65.4 — 어려운 선언을 이어 읽는 과정
- 표 65.5 — 선언 읽기 — 기억할 것
- 표 66.1 — 표준 라이브러리의 갈래와 대표 헤더
- 표 66.2 — 데이터형별 출력 서식
- 표 66.3 — 데이터형별 입력 서식
- 표 67.1 — 표준 헤더 한눈에
- 표 67.2 — 판별로 늘어난 헤더
- 표 67.3 — 표준 라이브러리 지형 — 기억할 것
- 표 68.1 —
<stdio.h>함수의 성공과 실패 - 표 68.2 — 스트림을 다룰 때의 규칙
- 표 69.1 — 읽기 함수의 지위와 평가
- 표 69.2 — 쓰기 함수와 조심할 것
- 표 69.3 — 하려는 일에 맞는 입출력 함수 고르기
- 표 70.1 — 문자열 복사 함수의 지위와 잘림
- 표 70.2 — 문자열 탐색 함수와 조심할 것
- 표 70.3 — 하려는 일에 맞는 문자열 함수 고르기
- 표 71.1 —
<stdlib.h>함수의 계약과 함정 - 표 71.2 — 끝내는 방법별 정리 작업
- 표 71.3 — 하려는 일에 맞는
<stdlib.h>함수 - 표 72.1 —
<ctype.h>함수가 참을 돌려주는 자리 - 표 72.2 — 문자 분류를 쓸 때의 규칙
- 표 73.1 — 로케일이 바꾸는 것 — 한국과 독일
- 표 73.2 — 로케일 범주와 영향받는 함수
- 표 73.3 —
setlocale두 번째 인자의 뜻 - 표 73.4 — 로케일 이름의 자리와 그것을 정하는 것
- 표 73.5 — 로케일 표기의 근거가 되는 표준
- 표 73.6 — 로케일 환경 변수의 순위
- 표 73.7 — 로케일을 다루는 단계
- 표 73.8 — 로케일 ① — 기억할 것
- 표 74.1 —
struct lconv의 멤버 - 표 74.2 — 자릿수 묶음 원소의 값과 뜻
- 표 74.3 — 부호 위치 값의 뜻
- 표 74.4 — 통화 표기를 조립하는 자리
- 표 74.5 —
strftime서식의 부류와 성질 - 표 74.6 — 정렬 체계와 그 수단
- 표 74.7 — 하려는 일에 맞는 로케일 도구
- 표 74.8 — 로케일 ② — 기억할 것
- 표 75.1 —
wchar_t를 두고 표준이 정한 것과 아닌 것 - 표 75.2 — 와이드 문자 관련 매크로
- 표 75.3 — 와이드 문자·문자열 리터럴의 타입과 인코딩
- 표 75.4 — 와이드 문자 매크로가 사는 헤더
- 표 75.5 — 멀티바이트 변환 함수의 층
- 표 75.6 —
mbrtowc반환값의 뜻 - 표 75.7 — 와이드 문자 ① — 기억할 것
- 표 76.1 — 플랫폼별 사실상의 인코딩
- 표 76.2 — 서러게이트 구역의 범위
- 표 76.3 — 윈도 API 접미사별 문자열 타입
- 표 76.4 — UTF-8 을 기본으로 두는 이유
- 표 76.5 — 툴킷별 문자열 타입
- 표 76.6 — 스트림 방향의 상태와 뜻
- 표 76.7 — 와이드 문자 ② — 기억할 것
- 표 77.1 — 자리마다 무엇을 쓰는가
- 표 77.2 — UTF-8 의 성질과 그 덕
- 표 77.3 — 거절해야 할 바이트열
- 표 77.4 — 텍스트를 세는 층과 그 단위
- 표 77.5 — 유니코드 정규화 형태 넷
- 표 77.6 — 텍스트를 다루다 미끄러지는 자리
- 표 77.7 — 지역별 레거시 인코딩
- 표 77.8 — 레거시 인코딩의 후행 바이트 범위
- 표 77.9 — 유니코드를 다루는 수단
- 표 77.10 — 실무의 유니코드 — 기억할 것
- 표 78.1 —
<math.h>함수의 함정 - 표 78.2 — 상황에 맞는 수학 함수 고르기
- 표 79.1 —
<time.h>의 타입과 함수 - 표 79.2 —
strftime지정자 - 표 79.3 — C23 이
<time.h>에 보탠 것 - 표 79.4 — 하려는 일에 맞는 시간 함수
- 표 80.1 — 진단과 제어 함수
- 표 80.2 — 진단 도구와 그 규칙
- 표 81.1 —
<signal.h>의 선언 - 표 81.2 — 처리기가 받는 것과 그 뜻
- 표 81.3 — 표준 신호의 이름과 기본 동작
- 표 81.4 — 처리기 안에서 허용되는 것
- 표 81.5 — 비동기 안전을 막는 것
- 표 81.6 — 처리기가
malloc을 부르면 - 표 81.7 — 신호와
longjmp를 함께 쓸 때 - 표 81.8 — 표준
signal의 빈틈과sigaction - 표 81.9 —
siginfo_t의 멤버 - 표 81.10 —
sigaction깃발의 뜻 - 표 81.11 — 신호 집합을 다루는 멤버
- 표 81.12 — 신호별 쓰임과 대표 사례
- 표 81.13 — 신호여야 했던 이유
- 표 81.14 — 신호 — 기억할 것
- 표 82.1 —
<setjmp.h>의 선언 - 표 82.2 —
setjmp가 돌려주는 값 - 표 82.3 —
setjmp가 허용되는 문맥 - 표 82.4 —
longjmp의 조건과 어겼을 때 - 표 82.5 — 점프 버퍼에 저장되는 것
- 표 82.6 — 점프 버퍼의 부분과 크기
- 표 82.7 —
longjmp뒤 변수의 값 - 표 82.8 —
volatile이 필요한 변수 - 표 82.9 —
longjmp가 막는 자리 - 표 82.10 — 다른 언어의 예외 장치
- 표 82.11 — 자원 정리를 누가 푸는가
- 표 82.12 — 하려는 일에 권하는 방법
- 표 82.13 — 비지역 점프 — 기억할 것
- 표 83.1 — 부록 K 가 더한 헤더와 오늘의 위치
- 표 83.2 — 선택 사항이 된 헤더들
- 표 83.3 — 판별 대표 보탬과 실제 쓰임
- 표 84.1 —
<threads.h>함수 - 표 84.2 —
shared += 1이 실제로 하는 일 - 표 84.3 — 뮤텍스의 종류와 쓰는 자리
- 표 84.4 — 뮤텍스 함수
- 표 84.5 — 조건 변수 함수
- 표 84.6 — 한 번만 하는 초기화의 꼴
- 표 84.7 — 스레드 지역 저장 함수
- 표 84.8 — C11 스레드가 덜 쓰이는 이유
- 표 84.9 — C11·POSIX·Win32 스레드 API 대조
- 표 84.10 — 상황별 스레드 권고
- 표 85.1 — 원자적 연산이 주는 세 가지
- 표 85.2 — 원자적 연산과 쓰는 자리
- 표 85.3 — CAS 는 기계마다 다른 방식으로 이뤄진다
- 표 85.4 — 같은 코드가 기계마다 다른 값을 치른다 — 깃발을 세우는 자리
- 표 85.5 — 메모리 순서와 그 보장
- 표 85.6 — 상황에 권하는 동시성 도구
- 표 85.7 — 원자적 연산 — 기억할 것
- 표 86.1 — 넘침 검사 — 예전 관용구와 지금
- 표 86.2 — 넘침을 묻는 법 — 기억할 것
- 표 87.1 — 매크로에서 키워드가 된 이름들
- 표 87.2 — C23 이 들여온 낱말
- 표 87.3 — 표준이 정한 일곱 속성
- 표 87.4 — 매크로에서 키워드로 — 기억할 것
- 표 88.1 — 실행 파일의 구역과 권한
- 표 88.2 — 리눅스와 윈도우의 주소 공간 배치
- 표 88.3 — 임베디드 기계의 기억 배치
- 표 88.4 — 프로그램의 기억 배치 — 기억할 것
- 표 89.1 — 할당자의 층
- 표 89.2 — 단편화를 완화하는 법
- 표 89.3 — 대안 할당자와 그 성격
- 표 89.4 — 대안 표준 라이브러리 구현
- 표 89.5 — 할당자의 속 — 기억할 것
- 표 90.1 — 다섯 버그 — C가 주는 것과 필요한 것
- 표 91.1 — proven 이 하지 않는 것
- 표 91.2 — proven 이름의 꼴과 뜻
- 표 91.3 — proven 을 빌드에 넣는 법
- 표 92.1 — 무시된 오류가 낳은 사고
- 표 92.2 — 결과 꾸러미의 타입
- 표 92.3 — 상황별 오류 처리
- 표 93.1 — 뷰 타입의 소유와 쓰기
- 표 93.2 — 검사 산술 함수가 돌려주는 것
- 표 93.3 — 바이트 연산의 이름
- 표 93.4 — 정렬 관련 함수와 계약
- 표 94.1 — 할당의 걸음
- 표 94.2 — 할당자 함수를 쓰는 자리
- 표 94.3 — 힙·아레나·풀 비교
- 표 94.4 — 상황에 맞는 할당자 고르기
- 표 95.1 — 문자열 함수의 할당과 파괴
- 표 95.2 — 문자열 연산의 실패 원자성
- 표 95.3 — UTF-8 함수의 계약
- 표 95.4 — 텍스트 함수의 실패와 소유
- 표 96.1 — 형식화 자리에 쓸 수 있는 것
- 표 96.2 — 형식화 함수와 할당자
- 표 96.3 — 파싱 함수가 읽고 돌려주는 것
- 표 96.4 — 스캐너 API
- 표 97.1 — 컨테이너별 만들기·할당·훑기
- 표 97.2 — 컨테이너 매크로
- 표 97.3 — 맵을 만들 때의 키와 주의
- 표 97.4 — 알고리즘 도구와 맞는 자리
- 표 98.1 — 파일을 다루는 걸음
- 표 98.2 — 파일 깃발의 뜻
- 표 98.3 — 스트림 함수와 주의
- 표 98.4 — 시간과 난수 API
- 표 99.1 — 코루틴 — 확인된 것과 아닌 것
- 표 99.2 — 다섯 버그에 대한 답과 그 장
- 표 100.1 — 간이 JSON — 담는 것과 빼는 것
- 표 100.2 — 코드에 적힌 것과 적히지 않은 것
- 표 100.3 — 같은 자리를 순수 C 와 proven 으로
- 표 100.4 — 도구가 맡은 일과 없었다면
- 표 100.5 — 세 판으로 짜 보기 — 기억할 것
- 표 101.1 — 실무의 도구
- 표 101.2 — 프로파일러가 재는 것
- 표 101.3 — 대표 C 프로젝트와 C인 이유
- 표 101.4 — MISRA C 가 걸어온 길
- 표 101.5 — 안전 등급의 뜻
- 표 101.6 — 코딩 규약과 그 소관
- 표 101.7 — 규약이 자주 금지하는 것과 이 책의 자리
- 표 101.8 — C 와 C++ 이 서로 갖지 못한 것
- 표 102.1 — 빌드가 대신해 주는 일
- 표 102.2 — 헤더에 둘 것과 두지 않을 것
- 표 102.3 — 흔한 폴더 갈래와 그 이유
- 표 102.4 — 시험의 갈래와 각각이 잡는 것
- 표 102.5 — 기계에 맡길 것과 사람이 볼 것
- 표 102.6 — 무엇이 어떤 물음에 답하는가
- 표 102.7 — 빌드와 시험 — 기억할 것
- 표 103.1 — 이 장의 낱말
- 표 103.2 — 골든 시연에서 무엇이 픽스처였나
- 표 103.3 — 픽스처로 삼으면 안 되는 것
- 표 103.4 — 음성 검사로 드러나는 것
- 표 103.5 — 래칫이 있을 때와 없을 때
- 표 103.6 — 깊이를 나누는 예
- 표 103.7 — 한 건의 일이 지나는 걸음
- 표 103.8 — 조용한 실패의 얼굴들
- 표 103.9 — 일이 굴러가는 방식 — 기억할 것
- 표 104.1 — 임베디드 컴파일러와 겨냥하는 칩
- 표 104.2 — 임베디드 작업별 도구
- 표 105.1 — C23 의 것 — 처음 만난 곳
- 표 105.1 — 연산자 묶음별 결합 방향
- 표 105.2 — 우선순위 때문에 다르게 묶이는 자리
- 표 105.3 — 찾는 것이 있는 자리
- 표 105.1 — 출력과 입력 서식의 뼈대
- 표 105.2 — 출력 변환 전체 목록
- 표 105.3 — 플래그·폭·정밀도의 자리
- 표 105.4 — 길이 수식어
- 표 105.5 — 입력 변환 전체 목록
- 표 105.6 — 서식 함수의 반환값
- 표 105.7 — 자주 하는 서식 실수와 고침
- 표 105.1 — 변환별 위험
- 표 105.1 — 표준 문서를 구하는 자리
- 표 105.2 — 더 읽을 책
- 표 105.3 — 볼 만한 강연과 이어지는 장
- 표 105.4 — 도구의 성격과 배우는 사람에게의 값
- 표 105.5 — 참고 자료
- 표 105.6 — 낡은 코드의 표식
- 표 105.7 — 표준판과 무료 초안
- 표 105.1 — EBNF 표기와 뜻
- 표 105.2 — 문법을 적는 규약
- 표 105.3 — 문법이 정하는 것과 그 밖
- 표 105.4 — 문법 — 기억할 것
- 표 105.1 — 요람의 열이 뜻하는 것
- 표 105.2 —
<string.h>요람 — 기억 블록 (mem*) - 표 105.3 —
<string.h>요람 - 표 105.4 —
<string.h>요람 — 견주기와 길이 - 표 105.5 —
<string.h>요람 — 찾기와 쪼개기 - 표 105.6 —
<string.h>요람 — 오류 문자열 - 표 105.7 — 매크로와 타입
- 표 105.8 — 모든 함수에 공통인 것
- 표 105.9 —
<ctype.h>요람 - 표 105.10 — 그 밖의 헤더 요람
- 표 105.11 — 요람의 공통 규약
- 표 105.12 —
<assert.h>요람 - 표 105.13 —
<errno.h>요람 - 표 105.14 —
<setjmp.h>요람 - 표 105.15 —
<stdarg.h>요람 - 표 105.16 —
<stddef.h>요람 - 표 105.17 — 빈 헤더가 된 사정
- 표 105.18 —
<iso646.h>가 주는 열한 이름 - 표 105.19 — 이름을 읽는 규칙
- 표 105.20 —
<limits.h>요람 - 표 105.21 — 타입에 딸리지 않은 셋
- 표 105.22 — 접미사가 뜻하는 것 — 세 접두에 모두 붙는다
- 표 105.23 — 타입에 딸리지 않은 이름들
- 표 105.24 — 세 갈래 — 무엇을 약속하는가
- 표 105.25 —
<stdint.h>요람 - 표 105.26 — 다른 헤더의 타입에 딸린 한계
- 표 105.27 —
<inttypes.h>요람 - 표 105.28 — 형식 매크로를 읽는 규칙
- 표 105.29 —
<stdbit.h>요람 — 타입 제네릭 이름으로 적는다 - 표 105.30 —
<locale.h>요람 - 표 105.31 —
<wctype.h>요람 - 표 105.32 —
<uchar.h>요람 - 표 105.33 —
<signal.h>요람 - 표 105.34 — 예외 깃발과 반올림 방향
- 표 105.35 —
<fenv.h>요람 - 표 105.36 — 무엇을 골라 주는가
- 표 105.37 — 값을 뜯어 보는 넷
- 표 105.38 —
<math.h>와 짝을 이루는 것들 - 표 105.39 — 값을 만들고 계산을 고르는 것들
- 표 105.40 — 스레드 그 자체 —
thrd_ - 표 105.41 — 맞춰 쓰기 —
mtx_·cnd_·call_once - 표 105.42 — 스레드마다 따로인 저장소와 타입들
- 표 105.43 —
<stdatomic.h>의 연산 - 표 105.44 — 타입 이름 —
atomic_을 붙인 것들 - 표 105.45 — 문자열과 기억 —
<string.h>의 짝 - 표 105.46 — 변환 — 바이트와 와이드 사이, 그리고 수로
- 표 105.47 — 입출력 —
<stdio.h>의 짝 - 표 105.48 — 타입 · 매크로 · 부속서 K
- 표 105.49 —
<time.h>요람 - 표 105.50 — 타입과 매크로
- 표 105.51 —
<stdlib.h>요람 — 기억 할당 - 표 105.52 —
<stdlib.h>요람 — 프로그램의 끝 - 표 105.53 —
<stdlib.h>요람 — 문자열과 수 사이 - 표 105.54 —
<stdlib.h>요람 — 셈 · 정렬 · 난수 · 멀티바이트 - 표 105.55 — 부속서 K 의 제약 처리기
- 표 105.56 —
<stdio.h>요람 — 열고 닫고 버퍼 - 표 105.57 —
<stdio.h>요람 — 읽고 쓰기 - 표 105.58 —
<stdio.h>요람 — 자리와 상태 - 표 105.59 — 매크로 · 타입 · 부속서 K
- 표 105.60 — 이름을 읽는 규칙
- 표 105.61 — 값이 무엇인지 묻기 — 매크로다
- 표 105.62 — 초등 함수
- 표 105.63 — 반올림 · 나머지 · 자리 옮기기
- 표 105.64 — 정밀도를 지키는 셈 — 넓은 타입으로 한 번에
- 표 105.65 — 십진 부동소수점 전용
- 표 105.1 — C23 이 언어에 보탠 것
- 표 105.2 — C23 이 전처리기에 보탠 것
- 표 105.3 — C23 이 라이브러리에 보탠 것
- 표 105.1 — 표준 C 에 없는 것
- 표 105.2 — 표준 C 만으로 끝낼 수 있는 것
- 표 105.3 — 무엇과 무엇 사이의 간극인가
- 표 105.4 — C 다음에 갈 수 있는 길
- 표 105.5 — C 로 창을 띄우는 길
- 표 105.6 — 끝까지 만들어 볼 만한 것들
- 표 105.7 — C 를 더 보는 자리
- 표 105.8 — 강의와 커리큘럼
- 표 105.9 — 무엇이 있는지 훑는 자리
- 표 105.1 — 덤프에 담기는 것과 담기지 않는 것
- 표 105.2 — 코어 파일의 프로그램 헤더
- 표 105.3 — 주소를 이름으로 바꾸는 세 층
- 표 105.4 — 덤프가 안 남는 흔한 이유
- 표 105.1 — 실행 파일 형식이 답해야 하는 네 가지
- 표 105.2 — PE 에서 알아 둘 세 가지
- 표 105.3 — 앞머리 몇 바이트로 알아보는 형식들
- 표 105.1 — 운영체제가 해 주던 일, 그리고 OS 없는 기계에서 누가 하는가
- 표 105.2 — 인터럽트·예외·트랩 — 셋을 가르는 축
- 표 105.3 — 인터럽트가 왔을 때 무엇을 누가 저장하는가
- 표 105.4 — 같은 주소를 만져도 — 기억일 때와 장치일 때
- 표 105.5 — 장치에 닿는 두 가지 설계
- 표 105.6 — 옛 코드에서 그대로 만나는 고전적 포트 자리
- 표 105.7 —
volatile이 해 주는 것과 해 주지 않는 것 - 표 105.8 — 임베디드가
malloc을 쓰지 않기로 하는 세 이유 - 표 105.9 — 다녀온 뒤에 다시 읽는 앞 장들
- 표 105.1 — 펌웨어가 하는 일
- 표 105.2 — MBR 512바이트의 자리 나눔
- 표 105.3 — BIOS 방식과 UEFI 방식
- 표 105.4 — 흔히 만나는 부트로더
- 표 105.5 — GRUB(옛 BIOS 방식)의 단계
- 표 105.6 —
core.img가 사는 자리 - 표 105.7 — UEFI 펌웨어가 다음 것을 찾는 순서
- 표 105.8 — 보안 부팅이 켜져 있을 때 리눅스가 뜨는 길
- 표 105.9 — U-Boot 계열의 단계
- 표 105.10 — MCUboot 가 갱신을 안전하게 만드는 방법
- 표 105.11 — 단계가 바뀔 때 넘어가는 것
- 표 105.12 — 증상 → 사슬의 어느 칸이 문제인가
- 표 105.13 — 윈도우의 부팅 사슬
- 표 105.1 — 이 부록에서 쓰는 낱말
- 표 105.2 — 연결을 가르는 네 축
- 표 105.3 — 이 부록에서 다루는 연결들
- 표 105.4 — 8N1 프레임의 열 비트
- 표 105.5 —
8N1같은 표기 읽는 법 - 표 105.6 — TTL 수준 UART 와 RS-232
- 표 105.7 — RS-232 의 신호선(9핀 기준)
- 표 105.8 — 흐름 제어의 두 방식
- 표 105.9 — UART 상태 레지스터에서 만나는 오류
- 표 105.10 — 병렬(센트로닉스) 포트의 신호들
- 표 105.11 — 빨라질수록 병렬이 지는 이유
- 표 105.12 — I2C 의 신호와 표시
- 표 105.13 — I2C 의 속도 모드
- 표 105.14 — SPI 의 네 선
- 표 105.15 — SPI 의 네 모드
- 표 105.16 — I2C 와 SPI 를 견주면
- 표 105.17 — 특이한 두 방식
- 표 105.18 — PCI 와 PCI Express
- 표 105.19 — PCIe 세대와 실효 속도(레인 하나 기준)
- 표 105.20 — PCI 설정 공간 머리말(종류 0)의 주요 필드
- 표 105.21 — BAR 의 낮은 비트가 종류를 말한다
- 표 105.22 — USB 속도 등급
- 표 105.23 — USB 의 전송 네 가지
- 표 105.24 — 에지 방식과 레벨 방식
- 표 105.25 — 끼어들기를 전달하는 방식의 변천
- 표 105.26 — DMA 가 버스를 쓰는 방식
- 표 105.27 — DMA 를 쓸 때 걸리는 세 가지
- 표 105.28 — 세 방식을 한눈에
- 표 105.1 — 이 부록에서 쓰는 낱말
- 표 105.2 — 섹터 크기의 세 갈래
- 표 105.3 — MBR 512바이트의 전체 자리
- 표 105.4 — MBR 파티션 항목 16바이트
- 표 105.5 — CHS 3바이트의 비트 배치
- 표 105.6 — 자주 보는 파티션 종류 바이트
- 표 105.7 — EBR 의 두 항목 — 기준이 다르다
- 표 105.8 — MBR 과 GPT
- 표 105.9 — GPT 헤더의 전체 필드 (LBA 1, 92바이트)
- 표 105.10 — GPT 파티션 항목의 전체 필드 (128바이트)
- 표 105.11 — GPT 속성 비트 가운데 알아 둘 것
- 표 105.12 — GUID 의 다섯 마디와 저장 차례
- 표 105.13 — 자주 보는 종류 GUID
- 표 105.14 — 1 MiB 정렬이 맞춰 주는 것들
- 표 105.15 — 파일 시스템의 「자기 설명서」가 있는 자리
- 표 105.16 — FAT32 부트 섹터(BPB)의 주요 필드
- 표 105.17 — FAT32 의 항목 값(아래 28비트만 쓴다)
- 표 105.18 — ext4 슈퍼블록의 주요 필드 (파티션 시작 + 1024바이트)
- 표 105.19 — NTFS 부트 섹터의 주요 필드
- 표 105.20 — 자주 만나는 파일 시스템
- 표 105.21 — 하드디스크에서 한 번 읽는 데 드는 시간
- 표 105.22 — SSD 안의 세 가지 단위
- 표 105.23 — 「덮어쓸 수 없다」가 낳는 것들
- 표 105.24 — 사다리의 아래층 (이 기계에서 잰 값)
- 표 105.25 — 이 층에서 나오는 설계 지침
- 표 105.26 — 증상 → 어느 층이 상했나
- 표 105.1 — C 와 POSIX 에서 만나는 시계들
- 표 105.2 — 이 부록을 쓴 기계와 ARM 폰의 숫자 (예제가 읽은 값)
- 표 105.3 — 무엇을 어떻게 재나 — 크기에 따라 방법이 다르다
- 표 105.4 — 어떤 대표값을 쓸 것인가
- 표 105.5 — 측정의 여섯 규율
- 표 105.6 — 사다리의 각 칸이 하는 일
- 표 105.7 — 포인터 추적이 하는 일
- 표 105.8 — 이 측정에서 나오는 설계 지침
- 표 105.9 — 「줄 단위」가 만드는 네 가지 결과
- 표 105.10 — 같은 계산, 다른 배치
- 표 105.11 — 배치를 고르는 기준
- 표 105.12 — 주소 번역의 세 경우
- 표 105.13 — 쪽 수에 따른 한 번당 비용 (이 기계와 ARM 폰에서 잰 값)
- 표 105.14 — 첫 접촉 비용이 실제로 문제가 되는 자리
- 표 105.15 — 같은 소스, 다른 코드 — 원소당 시간 (이 기계에서 잰 값)
- 표 105.16 — 패턴에 따른 값 (진짜 분기를 남긴 코드)
- 표 105.17 — 이 측정에서 나오는 지침
- 표 105.18 — 코어가 캐시 줄을 다루는 규약(대략)
- 표 105.19 — 두 스레드가 각자 제 칸을 올릴 때 (이 기계와 ARM 폰에서 잰 값)
- 표 105.20 — 거짓 공유를 피하는 방법
- 표 105.21 — 함께 쓰기의 값 (이 기계와 ARM 폰에서 잰 값)
- 표 105.22 — 값의 크기만 바꿨을 때 (이 기계에서 잰 값)
- 표 105.23 —
float와double— 벡터 명령을 쓸 때와 안 쓸 때 - 표 105.24 — 연산별 비용 (L1 안의 자료, 이 기계에서 잰 값)
- 표 105.25 — 이 측정에서 나오는 요령
- 표 105.26 — 이 부록에서 잰 값 모음 (이 기계와 ARM 폰, 중앙값)
- 표 105.27 — ARM 폰의 지연 곡선 (무작위 접근, 성능 코어에 묶어 잰 값)
- 표 105.28 — 증상 → 먼저 의심할 자리
- 표 105.1 — 기억을 다스리는 세 갈래
- 표 105.2 — 쪽 표의 층과 쪽 크기 — RISC-V 의 두 방식
- 표 105.3 — 주소를 번역하지 않는 기계에서 달라지는 것
- 표 105.4 — 주소 공간이 하나가 아닌 기계들
- 표 105.5 — DMA 와 캐시가 어긋날 때
- 표 105.1 — 참고 문헌을 적는 순서
그림#
- 그림 3.1 — 기억의 칸 — 한 칸은 여덟 비트, 번호는 1씩 늘어난다
- 그림 3.2 — 빅 엔디안 — 큰 자리부터 넣는다
- 그림 3.3 — 리틀 엔디안 — 작은 자리부터 넣는다
- 그림 4.1 — 정렬이 맞은 4바이트 — 4의 배수 번호에서 시작한다
- 그림 5.1 — 한 프로그램이 쓰는 기억의 배치. 이 그림 위에서 이후의 거의 모든 장이 읽힌다.
- 그림 6.1 — 바깥은
unsigned char로 읽은 값, 안쪽은 같은 비트를signed char로 읽은 값이다. - 그림 6.2 — 같은 여덟 비트라도 원래 타입의 부호에 따라 앞칸을 채우는 값이 다르다.
- 그림 7.1 —
float과double의 비트 배치. 칸의 너비가 비트 수의 비율이다. - 그림 12.1 — 가상 쪽이 쪽 표를 거쳐 물리 쪽에 짝지어진다. 이어져 있던 것이 흩어진다 — 이 그림이 나르는 사실은 그 하나다.
- 그림 18.1 — 소스 한 줄이 기계어 몇 줄이 되는지 나란히 보여 주는 화면 얼개.
- 그림 18.2 — 값은 상자로, 포인터는 화살표로 — 시각화 도구가 그려 주는 그림.
- 그림 27.1 — 표준이 가른 타입의 갈래. 점선 상자는 여러 가지를 묶어 부르는 이름이다.
- 그림 30.1 — 네 단계를 순서대로 따른다. 대부분의 사고는 3번에서 난다.
- 그림 36.1 — 포인터 값 하나에 붙어 다니는 세 가지. 주소만 같아도 같은 포인터가 아니다.
- 그림 39.1 — 주소는 같고 타입이 다르다 — 그래서 원소가 몇 개인지가 사라진다.
- 그림 39.2 —
+1이 건너뛰는 폭은 가리키는 타입의 크기다. - 그림 40.1 —
a[2][1]을 찾아가는 두 번의 점프 — 행 크기로 한 번, 원소 크기로 한 번. - 그림 41.1 — 포인터의 배열 — 배열 자체는 붙어 있고, 가리키는 곳은 흩어져 있다.
- 그림 41.2 — 부르는 쪽의 포인터를 바꾸려면 그 포인터가 사는 자리를 넘겨야 한다.
- 그림 47.1 — 빗금이 패딩이다. 멤버는 자기 정렬의 배수 자리에 놓이고, 끝에도 자리가 붙는다.
- 그림 47.2 — 머리와 데이터를 한 덩어리로 — 할당이 둘에서 하나로 준다.
- 그림 47.3 — 앞 멤버가 같아도 마지막 멤버의 타입이 배열의 자리를 바꾼다.
- 그림 48.1 — 구조체의 배열 — 원소 사이에 빈자리가 없어야 하므로 크기가 정렬의 배수로 올림된다.
- 그림 48.2 — 위는 패딩까지 나가는 12바이트, 아래는 내가 정한 순서의 7바이트다.
- 그림 85.1 — 깃발이 보이면 그 앞의 데이터도 보이는가.
- 그림 105.1 — 형식은 달라도 로더가 묻는 질문은 같다.
- 그림 105.1 — 하드웨어 예외가 내 C 함수까지 오는 길, 그리고 돌아갈 수 없는 이유.
- 그림 105.2 — 칩마다 다른 「하드웨어가 저장해 주는 양」 — 그 차이가 컴파일러의 일을 정한다.
- 그림 105.3 — 주소 공간이 하나인 설계와 둘인 설계.
- 그림 105.1 — 부팅의 사슬 — 기계는 달라도 각 칸이 하는 일은 같다.
- 그림 105.1 — 같은 한 바이트를 직렬로 보낼 때와 병렬로 보낼 때.
- 그림 105.2 — CPU 가 직접 나르는 길과 DMA 가 나르는 길.
- 그림 105.1 — 디스크 한 장에 겹쳐 있는 세 층 — 섹터의 줄, 파티션 표, 파일 시스템.
- 그림 105.2 — EBR 사슬 — 같은 표의 두 칸인데 더하는 기준이 다르다.
- 그림 105.3 — SSD 의 쪽과 블록 — 쓰기 증폭이 생기는 자리.
- 그림 105.1 — 측정의 세 함정과 그 대비.
- 그림 105.2 — 실제로 잰 지연 곡선. 세로 점선이 이 기계의 캐시 경계다.
- 그림 105.3 — 걸음 폭에 따른 한 번당 비용. 세로 점선이 이 기계의 캐시 줄 크기다.
- 그림 105.4 — 예측이 맞았을 때와 틀렸을 때 파이프라인에서 벌어지는 일.
- 그림 105.5 — 같은 줄에 있을 때와 떨어뜨렸을 때.