Programing

C ++에서 키워드 등록

lottogame 2020. 10. 7. 07:15
반응형

C ++에서 키워드 등록


차이점은 무엇입니까

int x=7;

register int x=7;

?

C ++를 사용하고 있습니다.


2010 년에 존재했던 C ++에서 "auto"또는 "register"키워드를 사용하는 유효한 프로그램은 해당 키워드가 제거 된 프로그램과 의미 상 동일합니다 (문자열 매크로 또는 기타 유사한 컨텍스트에 나타나지 않는 한). 그런 의미에서 키워드는 프로그램을 적절하게 컴파일하는 데 쓸모가 없습니다. 반면에 키워드는 특정 매크로 컨텍스트에서 매크로를 잘못 사용하면 가짜 코드를 생성하는 대신 컴파일 시간 오류가 발생하도록하는 데 유용 할 수 있습니다.

C ++ 11 및 이후 버전의 언어에서 auto키워드는 초기화 된 객체에 대한 의사 유형으로 작동하도록 용도가 변경되었으며, 컴파일러는 초기화 표현식의 유형으로 자동으로 대체합니다. 따라서 C ++ 03에서 선언 : 블록 컨텍스트 내에서 사용될 때 auto int i=(unsigned char)5;와 동일 하며 제약 조건 위반이었습니다. C ++ 11에서는 제약 조건 위반 이되었고 .int i=5;auto i=(unsigned char)5;auto int i=(unsigned char)5;auto i=(unsigned char)5;auto unsigned char i=5;


register 메모리 대신 프로세서 레지스터에 해당 변수를 저장하도록 권고하는 컴파일러에 대한 힌트입니다 (예 : 스택 대신).

컴파일러는 그 힌트를 따를 수도 있고 따르지 않을 수도 있습니다.

Herb Sutter에 따르면 "아닌 키워드 (또는 다른 이름의 주석)" :

레지스터 지정자는 자동 지정자와 동일한 의미를 갖습니다.


에 따르면 허브 셔터 , register"입니다 공백과 정확히 같은 의미 "와 C ++ 프로그램의 의미에 영향을주지 않습니다.


오늘날의 컴파일러에서는 아마 아무것도 없을 것입니다. Is는 원래 더 빠른 액세스를 위해 레지스터에 변수를 배치하는 힌트 였지만 오늘날 대부분의 컴파일러는 그 힌트를 무시하고 스스로 결정합니다.


거의 확실하지 않습니다.

registerx많이 사용할 계획 이며 레지스터에 배치해야한다고 생각 하는 컴파일러에 대한 힌트 입니다.

그러나 컴파일러는 이제 평균 (또는 전문가) 프로그래머보다 레지스터에 어떤 값을 배치해야하는지 결정하는 데 훨씬 더 뛰어나므로 컴파일러는 키워드를 무시하고 원하는대로 수행합니다.


register키워드는 유용했다 :

  • 인라인 어셈블리.
  • 전문가 C / C ++ 프로그래밍.
  • 캐시 가능한 변수 선언.

register키워드가 필요한 생산 시스템의 예 :

typedef unsigned long long Out;
volatile Out out,tmp;
Out register rax asm("rax");
asm volatile("rdtsc":"=A"(rax));
out=out*tmp+rax;

C ++ 17 에서 더 이상 사용되지 않습니다.


register C ++ 17까지 사용되지 않으며 사용되지 않으며 예약됩니다.

출처 : http://en.cppreference.com/w/cpp/keyword/register


컴파일러의 옵티 마이저에 두 개의 변수가 있고 하나를 스택에 넘겨야하는 경우를 고려하십시오. 두 변수가 컴파일러에 대해 동일한 가중치를 갖게되었습니다. 차이가 없다면 컴파일러는 변수 중 하나를 임의로 유출합니다. 반면에 register키워드는 컴파일러에게 어떤 변수가 더 자주 액세스되는지 힌트를 제공합니다. x86 프리 페치 명령어와 유사하지만 컴파일러 최적화 프로그램 용입니다.

분명히 register힌트는 사용자가 제공 한 분기 확률 힌트와 유사하며 이러한 확률 힌트에서 추론 할 수 있습니다. 컴파일러가 일부 분기가 자주 사용된다는 것을 알고 있으면 분기 관련 변수를 레지스터에 유지합니다. 그래서 저는 브랜치 힌트에 대해 더 신경을 쓰고 register. 이상적으로는 프로파일 러가 어떻게 든 컴파일러와 통신하고 그러한 뉘앙스에 대해 생각하지 않아도됩니다.

참고 URL : https://stackoverflow.com/questions/3207018/register-keyword-in-c

반응형