Hacker News기타

C++26에서 무한 루프 정의된 동작으로 변경

원제 C++26: Trivial infinite loops are no longer undefined behaviour

117 포인트댓글 143
Key Point

임베디드와 커널 코드의 오류 시 정지 패턴이 컴파일러에 의해 최적화되어 실행 흐름이 왜곡되는 보안 취약점을 C++26이 근본적으로 해결했습니다.

핵심 요약

  • C++11부터 부작용 없는 while(true); 루프는 미정의 동작이었고 컴파일러가 이를 제거하거나 이후 코드를 실행할 수 있었다.
  • C는 제어 표현식이 상수 표현식인 루프를 미정의 동작으로 보지 않았으나, C++는 이를 채택하지 않아 불필요한 차이가 생겼다.
  • C++26의 제안 P2809R3는 '자명한 무한 루프(trivial infinite loop)'를 정의된 동작으로 변경했다.
  • 자명한 무한 루프는 본체가 완전히 비어있고(; 또는 {}) 제어 표현식이 true로 평가되는 상수 표현식이어야 한다.
  • 컴파일러는 이제 해당 루프를 std::this_thread::yield() 호출로 대체하며, 이는 특히 임베디드와 커널 코드의 오류 처리 패턴을 보호한다.
  • 프리스탠딩 구현에서는 yield() 치환이 일어나지 않을 수 있으며, 이는 베어메탈 시스템의 의도적 정지 루프를 보존한다.
AI 요약 안내

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

요약 원칙 ↗