register
스토리지 클래스 객체가 레지스터에 저장된다는 것을 의미하지는 않는다. 이 표준은 말한다 :
저장소 클래스 지정 register
의 객체에 대한 식별자의 선언이 개체에 대한 액세스가 가능한 을 빨리 할 것을 제안. 그러한 제안의 범위는 구현 정의 된 입니다.
것을 수행하는 하나 개의 방법이 아니라 메모리에 비해 CPU 레지스터의 목적이다 저장
(인용은 ISO C 표준의 N1570 초안에서 섹션 6.7.1 단락 6이다) 그러나 유일한 것은 아닙니다.
최신 컴파일러 (보통 일반적인 지혜에 따르면)는 아마도 변수를 레지스터에 저장하여 속도를 결정하는 것보다 낫습니다. 따라서 register
키워드를 사용하면 컴파일러의 작업을 방해하지 않을 것입니다 최적화.
register
또한 메모리에 저장되어 있어도 객체의 주소를 가져 오는 것은 불법입니다.
기본적으로 현대 컴파일러가 수행하는 정교한 최적화 작업을 수행하지 않은 초기 컴파일러 (1970 년대)의 잡동사니입니다. 이러한 컴파일러의 경우에는 성능을 크게 향상시킬 수 있습니다.
(현대 컴파일러는 변수의 주소가 필요하거나 사용할 수있는 레지스터가 충분하지 않기 때문에 모든 변수를 레지스터에 할당 할 수 있다고 가정하고 필요한 경우에만 메모리에 "유출"한다고 생각합니다. .)
블록 범위 객체는 기본적으로 '자동'이므로 지정자는 완전히 쓸모가 없습니다. 'register'는 lobotomized 컴파일러에 대해서만 중요합니다. – EOF
왜 lobotomized 컴파일러에서만 중요합니까? 그리고 그것은 심지어 무엇을 의미합니까? @EOF – amanuel2
'gcc','icc' 또는'clang'과 같은 최신 컴파일러를 사용하고 적당한 최적화 설정을 가능하게하면 컴파일러는 주소가없는 객체를 할당합니다 (또는 주소가 함수를 벗어나지 않습니다))를 'register'로 선언했는지 여부에 관계없이 cpu 레지스터에 보관할 수 있습니다. – EOF