개발 & 코딩 Jul 19, 2026북마크에 추가

2024년 기사 하나가 오늘 헤커 뉴스 상단에 다시 올라왔는데, 더 잘 설계된 메모리 레이아웃이 이진 탐색보다 정적 구조를 40배나 빠르게 만든다는 내용을 담고 있습니다. 중요한 교훈은 그 숫자가 아니라, 그 추론 방식이라는 점입니다.
실제 사례: 1억 개의 항목으로 정렬된 배열에서 키를 검색해야 합니다. 학교에서 배운 첫 번째 방법은 binary search(이진 탐색)입니다. log₂(n) ≈ 27회의 비교가 필요합니다. 이론적으로는 최적입니다.
그런데… 2026년, 현대 CPU에서 binary search는 katastrofik(재앙적)입니다. 왜일까요? 각 비교가 이전 결과에 따라 달라지는 메모리 주소를 읽기 때문입니다. 프로세서는 예측, 사전 로딩, 파이프라이닝을 할 수 없습니다. 매 단계마다 캐시 미스(최신 DDR5 기준 약 100 CPU 사이클, 약 30ns)를 기다려야 합니다.
2024년 작성된 「Static search trees: 40x faster than binary search」라는 글(오늘 HN 헤드라인에 다시 게재됨)은 정확히 이 문제를 다룹니다. 제안된 해결책은 정적 B-tree입니다. 데이터베이스 교과서의 동적 B-tree가 아니라 CPU 최적화 버전입니다.
__builtin_prefetch)를 미리 로드글에서 측정한 결과: 1억 개의 항목에서 검색 시간이 약 150ns에서 4ns로 떨어졌습니다. 40배나 빨라졌습니다.
교훈은 “binary search가 죽었다”가 아닙니다. 고전적 알고리즘 복잡도(O log n)는 캐시 메모리를 무시한다는 점입니다. 현대 CPU에서 캐시 미스를 최소화하는 구조가 비교 횟수를 최소화하는 구조보다 거의 항상 더 빠릅니다.
우리가 프로젝트에서 접하는 다른 예시:
flat_hash_map) vs. 기존 std::HashMapslice::sort_unstable에 사용) vs. 학교식 quicksortstatic-search-tree 또는 실용 예시를 위한 동등한 라이브러리핫 루프(hot loop)를 최적화할 때 첫 번째로 꺼내야 할 프로파일러는 cachegrind가 아닙니다. Linux의 perf stat -e cache-misses,cache-references(또는 macOS의 Instruments)입니다. 2026년의 진정한 성능은 여기에서 결정됩니다. 복잡도 이론은 무엇이 가능한지를 말해주지만, 캐시 메모리는 무엇이 도달 가능한지를 결정합니다.
인공지능이 작성하고 사람의 편집 감독하에 검수한 기사입니다.