Hacker News인프라 · 데브옵스

C 언어의 미정의 동작 감소, 메모리 안전성 강화 논의

원제 Reducing undefined behavior in the C language

111 포인트댓글 96
Key Point

C 언어는 여전히 주요 임베디드·시스템 소프트웨어의 핵심이며, 표준위원회가 메모리 안전성 개선에 적극 나서면서 앞으로 C의 보안과 안정성이 크게 달라질 가능성을 보여준다.

핵심 요약

  • C 언어는 여전히 이식성과 안정성, 빠른 컴파일 속도를 갖춘 우수한 언어로, 추상 머신 모델을 통해 다양한 하드웨어를 지원한다.
  • C 표준에는 약 100개의 미정의 동작(undefined behavior)이 존재하는데, 이는 컴파일러 최적화와 하드웨어 제어를 가능하게 하지만 개발자 간 의견 충돌을 초래한다.
  • 구조체 패딩 읽기, 0으로 나누기 후 실행 흐름 등의 경우 컴파일러가 예상 밖으로 코드를 최적화하여 버그를 야기하는 사례들이 있다.
  • C23 표준에서 '시간 여행' 최적화를 금지하고, 진행 중인 C2y 초안에서 45개의 미정의 동작을 제거하는 등 표준 자체가 개선되고 있다.
  • 컴파일러 경고, 정적 분석기, 메모리 새니타이저, LLM 기반 도구, 형식 검증 등 다양한 도구로 미정의 동작을 탐지할 수 있으며, 최근 정수 오버플로우와 use-after-free 경고 개선이 이뤄졌다.
  • C의 메모리 안전성 문제는 타입 안전성, 공간적 메모리 안전성, 시간적 메모리 안전성의 세 가지 하위 문제로 나뉘는데, 각각 컴파일러 검사, 배열 경계 검사, CHERI 아키텍처 등으로 개선 가능하다.
  • 완전한 메모리 안전성 달성에는 비용이 많이 드는 런타임 검사 또는 형식 검증이 필요하며, 제한된 언어와 검증 도구의 조합이 가장 실질적인 해결책이다.
  • C23에서 K&R 함수 정의, 1의 보수 머신 지원, 삼중자(trigraph) 등이 제거되었고, C2y는 케이스 범위, 명명된 for 루프, _Countof() 매크로 등을 추가할 예정이다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗