Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++의 레지스터(register) 스토리지 클래스 완벽 정리

C 언어에서의 register 저장 클래스

C 언어에서 register 저장 클래스 지정자(storage class specifier)는 컴파일러에게 해당 객체를 CPU의 머신 레지스터에 저장해 달라고 요청하는 역할을 합니다. 일반적으로 루프 제어 변수처럼 접근 빈도가 매우 높은 변수에 지정하여, 메모리 접근 시간을 최소화함으로써 프로그램 성능을 향상시키려는 목적으로 사용됩니다.

다만 컴파일러가 이 요청을 반드시 따라야 하는 것은 아닙니다. 대부분의 시스템에서 레지스터의 크기와 개수가 제한적이기 때문에, 실제로 레지스터에 배치될 수 있는 변수는 극소수에 불과합니다.

컴파일러의 자체 최적화

현대의 컴파일러들은 개발자가 명시적으로 지정하지 않아도 변수의 사용 패턴을 분석하여 가장 적합한 변수를 레지스터에 할당하는 레지스터 할당(register allocation) 최적화를 자동으로 수행합니다. 따라서 오늘날에는 register 키워드를 직접 사용하는 것이 성능 향상에 큰 도움이 되지 않습니다.

C++에서의 register 키워드

C++에서 register는 실질적으로 사용되지 않는 예약 키워드(reserved keyword)입니다. 그럼에도 이 키워드가 언어 사양에 남아 있는 이유는 기존 C 코드와의 문법적 호환성(syntactic compatibility)을 유지하기 위한 것으로 합리적으로 추측할 수 있습니다.

참고로 register는 C++11에서 저장 클래스 지정자로서 폐기(deprecated)되었고, C++17에서는 그 의미가 완전히 제거되었습니다. 다만 여전히 예약어로 남아 있으므로 변수나 함수의 이름(식별자)으로 사용할 수는 없습니다.