인프런 커뮤니티 질문&답변
register 변수가 register에 있는지 확인할수 있는 방법이 있나요?
작성
·
106
1
안녕하세요.
register 변수는 register 에 있을수도 없을 수도 있다고 들었습니다.
register 변수가 register에 있는지 확인할 수 있는 방법이 있나요?
답변 2
2
안녕하세요? 질문&답변 도우미 durams입니다.
'register에 있을수도 없을 수도 있다'라는 표현에는 오해의 소지가 있을 수 있습니다. 어떠한 값이 CPU에 의해 처리되려면 결국 메인 메모리에서 레지스터로 로드되어야 하기 때문입니다. 프로그램이 실행되는 전체 시간동안 수많은 값들이 레지스터에 올라왔다가 내려왔다가를 반복하게 되죠.
보다 정확하게 말하면, register 키워드는 '가능하면 해당 값을 레지스터에 계속 유지하도록 프로그램을 작성해줘'라고 컴파일러에게 요청하는 것에 가깝습니다.
그리고 현대 컴파일러는 이러한 힌트를 프로그래머가 지정해주지 않아도 최적화를 매우 잘 수행하며, 대부분의 경우 register 키워드가 무시될 수 있습니다. 다만 교수님께서 말씀하신 것처럼 임베디드 환경에서 특정 레지스터를 지정하여 사용하는 등 용례가 없지는 않습니다.
'register 변수가 레지스터에 있는지 확인할 수 있는 방법'에 대해서는, 질문을 'register 변수가 레지스터에 유지되는지 확인할 수 있는 방법'으로 바꿔서 말씀드리겠습니다. 키워드 자체가 컴파일러에게 최적화에 대한 힌트를 주는 것이기 때문에, 그것이 반영되었는지는 컴파일의 결과인 어셈블리 코드를 보면 알 수 있습니다.
어셈블리 코드를 확인하기 위한 방법으로는 간단하게는 비주얼 스튜디오에서 디버깅 도중 디스어셈블리를 진행할 수 있으며, 또는 빌드 결과로 생성된 오브젝트 파일(.o)에 대해 objdump를 사용하여 어셈블리 코드(.s)를 생성할 수도 있습니다. (기본적으로 비주얼 스튜디오는 어셈블리 코드 파일의 생성을 생략합니다)
다만 어셈블리 코드를 본다고 해서 레지스터에 저장되어있다고 직관적으로 쓰여져 있지는 않으며, 만약 어셈블리어 코드가 레지스터들을 사용하여 연산하는 패턴 사이에서도 해당 값이 특정 레지스터에 유지된다면 register 키워드가 적용되었다고 판단할 수 있을 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. cs108082cs님.
C언어에서 register 키워드를 사용하면 컴파일러에게 변수를 레지스터에 저장해서 더 빠르게 접근하도록 힌트를 제공하지만, 결국 실제 저장 위치의 결정은 컴파일러에 달려 있습니다. 그렇기 때문에, register 변수가 실제로 레지스터에 할당되었는지를 직접 확인하는 방법은 없습니다.
그러나, 이는 현대 컴파일러에서는 거의 무시되는 제안으로, 컴파일러는 자체 최적화 알고리즘에 따라 레지스터 할당을 결정합니다. 따라서, register 키워드 없이도 컴파일러가 최적화를 잘 수행할 것입니다.
이와 관련된 질문과 더 깊이 있는 설명을 원하시면 아래의 유사한 질문과 답변을 참고하시기 바랍니다.
이는 register 키워드의 역사적 배경과 용도, 그리고 현대의 사용 패턴에 대해 설명하는 게시물입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






감사합니다.^^