register 키워드에 대해서..

ddoman의 이미지

c++코드를 보다보니..

변수앞에 register란 키워드를 붙이는 코드가 있더라구요..

예를들어 register int x;
이런식으로..

암튼 레퍼런스 찾아보니깐 CPU레지스터에다가 직접할당(??)한다는
소린거 같은데..

뭐..속도가 빠르다..그렇게 생각되는데..

레지스터 키워드를 붙인 변수가 확실히 퍼포먼스향상에 도움이
되는지 궁금합니다( 비교적 )

이 키워드가 잘 쓰이는 이런경우에 딱! 소스..같은건 없나해서..

과연 저 키워드가 별의미 없는것인지 어떤 상황에서 주로사용되는지
궁금합니다..

사용담도 알려주시면 감사하겠구요...^^

김충길의 이미지

register 키워드는 명시적으로 컴파일러 한테 변수를 스택이 아닌
CPU 레지스터를 사용하는 코드를 생성하고 하는 것입니다.

옵티마이즈 옵션을 쓰는 경우 컴파일러가 자동으로
레지스터에 할당합니다.

아무래도 레지스터를 사용하는게 빠르겠죠.
하지만 이 키워드를 사용하였다고 해도 꼭 레지스터를 사용할 수 있는건
아닙니다. 여유있는 CPU 레지스터에 따라 사용되기도 하고
안되기도 합니다.

screen + vim + ctags 좋아요~

ironiris의 이미지

다른 상황에서도 사용하지만
특히 for 구문에서 주로 선언합니다.
근데 요즘은 컴파일러가 좋아져서 알아서 잘 할당해준다고 합니다.
그냥 저런게 있나보다.... 하고 생각하시면 됩니다.

musiphil의 이미지

요즘은 컴파일러의 최적화 기능이 하도 좋아서, 사람이 '이 변수는 빠르게 접근할 필요가 있다'라고 판단하여 직접 register 키워드를 붙여주는 것보다 더 잘 알아서 최적화를 해 준다고 합니다. 사람이 프로그램에서 어느 부분에 실행 시간이 많이 걸릴지 추측하는 것(profile 없이)을 얼마나 못 하는지도 유명한 얘기고요.

결론은, register 키워드가 큰 도움이 될 것이 없고 신경쓰실 필요도 없다는 것입니다. 컴파일러가 더 잘 해 준다는 그런 세세한 최적화에 신경 쓸 시간에 더 좋은 알고리즘을 찾는 것이 더 생산적일 것입니다.