• Overview 하드웨어(프로세서, 메모리, 디스크, 네트워크)와 소프트웨어(os, 컴파일러, 라이브러리, 프로토콜)이 어떻게 합쳐져 프로그램을 실행하는지 배운다.
  • 재미있는 사실
    • int는 정수가 아니고 float은 실수가 아니다. 50000*50000=? (overflow) (1e20+(-1e20))+3.14 = 3.14(ok) 1e20+((-1e20)+3.14) = ?
    • 컴퓨터는 랜덤을 만들 수 없다
    • 어셈블리어를 알아야 한다.
      • 버그의 원리를 알 수 있다
      • 비효율적인 코드의 원리를 알 수 있다
      • 시스템 소프트웨어를 짤 수 있다
    • 메모리에 관해
      • 메모리는 할당되고 해제되어야 한다
      • 시간과 공간을 모두 생각해야 한다.
      • 메모리 퍼포먼스는 동일하지 않다(캐시, 가상 메모리)
      • 메모리 접근 오류
        • C와 C++는 메모리 보호를 해주지 않는다
          • 인덱스 범위 벗어남
          • 널포인터
          • 할당 해제 문제
    • 점근적 복잡도만 중요한 것이 아니다
      • O(n)이라고 O(n^2)보다 항상 빠르지 않다 상수를 고려해야 한다!
      • a[i][j] 순회가 a[j][i] 순회보다 20배 빠르다 메모리 구조를 알면 빨라질 수 있다!