기타 Hacker News · 2026-10-09

"C 언어에서 미정의 동작 줄이기"… 컴파일러 최적화와 메모리 안전성 논쟁

핵심 요약
  • Kernel Recipes 컨퍼런스에서 C 언어의 미정의 동작(Undefined Behavior) 문제와 메모리 안전성 개선 가능성이 발표되었습니다.
  • C 표준의 추상 기계 개념과 자유도로 인해 컴파일러가 공격적 최적화를 수행하며 개발자 의도와 충돌하는 사례들이 지적되었습니다.
  • 0으로 나누기 최적화나 연산 순서 왜곡 등 미정의 동작으로 인한 문제를 줄이기 위한 C23 표준 규정 등의 노력이 다뤄졌습니다.
요약 최근 열린 커널 레시피(Kernel Recipes) 컨퍼런스에서 의공학 교수이자 오랜 리눅스 기여자인 마틴 우에커(Martin Uecker)가 C 언어의 미정의 동작(Undefined Behavior, UB) 문제와 이를 줄여 메모리 안전 언어로 나아갈 수 있는지에 대해 발표했습니다. 발표자는 현대에도 C 언어가 빠른 컴파일과 실행 속도, 장기적인 안정성, '보는 대로 동작한다'는 직관성 덕분에 훌륭한 언어로 남아있다고 평가했습니다. 그러나 C 언어는 초창기 다양한 비표준 하드웨어(예: 9비트 바이트 시스템, 다양한 정수 표현 방식 등)를 지원하기 위해 '추상 기계(abstract machine)' 개념을 도입했고, 오직 관찰 가능한 동작(observable behavior)만을 보존하도록 표준을 제정했습니다. 이로 인해 컴파일러 개발자에게는 관찰 불가능한 영역에서 광범위한 자율성이 주어졌으며, 이 과정에서 미정의 동작이 생겨났습니다. 문제는 표준이 미정의 동작에 대해 컴파일러 구현체에 아무런 제약을 두지 않다 보니, 컴파일러가 공격적인 최적화를 명목으로 개발자의 의도와 전혀 다른 방식으로 코드를 왜곡하거나 조건 검사를 통째로 생략해 버리는 일이 잦다는 점입니다. 예를 들어 0으로 나누는 연산이 포함된 코드 경로를 컴파일러가 '어차피 정의되지 않은 동작이니 실행될 리 없다'고 판단하여 사전 검사 분기 자체를 지워버리는 식입니다. 심지어 메모리 쓰기 작업보다 이후의 연산을 앞당겨 실행하는 식의 '시간 여행' 최적화 버그까지 발생해 C23 표준에서 이를 금지하는 규정이 추가되기도 했습니다. 이처럼 개발자와 컴파일러 설계자 간의 오랜 갈등을 낳고 있는 미정의 동작을 줄이는 것이 현대 C 언어의 핵심 과제로 논의되고 있습니다.
Sponsored · 광고