C & Compiler
3주차 - Pointer Aliasing 때문에 컴파일러가 최적화를 포기하는 순간
포인터 두 개가 같은 메모리를 가리킬 수 있다는 가능성 하나가 어떻게 레지스터 캐싱, 명령어 재배치, SIMD 벡터화까지 막는지, 그리고 지역 변수와 restrict가 그 가능성을 어떻게 없애는지 정리.
하나의 주제로 이어지는 배움의 기록.
포인터 두 개가 같은 메모리를 가리킬 수 있다는 가능성 하나가 어떻게 레지스터 캐싱, 명령어 재배치, SIMD 벡터화까지 막는지, 그리고 지역 변수와 restrict가 그 가능성을 어떻게 없애는지 정리.
C에는 배열 경계 검사가 없다는 사실에서 출발해서, 스택과 힙에서 버퍼 오버플로우가 실제로 어떤 메모리를 덮어쓰는지 가상 메모리 구조로 정리.
타입 정보가 없는 C/C++ 환경에서 BDWGC가 스택과 힙을 워드 단위로 훑어 포인터로 의심되는 값을 마킹하는 방식과, 그로 인해 생기는 오탐 문제를 정리.