hello.c
프로그램 같이 간단한 프로그램에서는, 정확하고 효율적인 기계어를 생성하기 위해 컴파일 시스템에 의존합니다. 하지만, 왜 프로그래머들이 컴파일 시스템의 동작 방식을 이해해야하는지 몇가지 중요한 이유가 있습니다.
switch
문은 언제나 if-else
문보다 효율적일까요? 함수 호출로 인한 오버헤드는 어느 정도일까요? while
문이 for
문보다 더 효율적일까요? 포인터 참조는 배열 index보다 더 효율적일까요? 왜 루프문은 by reference
로 전달하는 것보다 지역변수로 더하는 것이 더 빠를까요? 어떻게 단순히 수학적 표현에서의 parentheses를 재배열 함으로써 함수가 더 빨라질까요? 3장에서는 최신 세대의 기계어인 x86-64를 소개합니다. 우리는 컴파일러가 다른 C 구조들을 이 언어로 어떻게 변환하는지 살펴볼 것입니다. 5장에서는, C code에 간단한 변화를 줘 컴파일러가 일을 더 잘하게 함으로써 C 프로그램 퍼포먼스를 상승시켜볼 것입니다. 6장에서는, 메모리 시스템의 계층적구조에 대해 배울것입니다. 거기에 더해 어떻게 C 컴파일러가 메모리에 배열 데이터를 저장하는지, 어떻게 C 프로그램들이 이러한 특성을 활용해 더 효율적으로 동작하는지도 살펴볼 것입니다.buffer overflow
취약성은 네트워크와 인터넷 서버의 많은 취약점을 설명해 왔습니다. 이 취약점들은 너무 적은 프로그래머들 만이 신뢰하지 않는 소스로부터 들어오는 데이터 형태와 양을 주의해서 제한해야함을 이해하고 있기에 발생합니다. 안전한 프로그래밍을 하는 첫발은 데이터와 제어 정보가 프로그램 스택에 저장되는 방식의 결과를 이해하는 것에서부터 출발합니다. 우리는 스택 규율과 버퍼 오버플로우 취약성을 3장에서 다룹니다. 또한 프로그래머, 컴파일러, 운영체제에 의해 활용되는 이러한 위협을 줄이는 방법 또한 배우게 될것입니다.