Programing

재해석_캐스트 캐스팅 비용

c10106 2022. 5. 3. 21:38
반응형

재해석_캐스트 캐스팅 비용

C++ 재해석_cast와 C 포인터캐스트는 컴파일 타임 기능일 뿐 성능비용이 전혀 없는 것으로 알고 있다.

이게 사실이야?

우선 좋은 가정이다.그러나 최적기는 a가 있는 상태에서 가정할 수 있는 것에 제한을 받을 수 있다.reinterpret_cast<>또는 C 포인터 캐스트.그러면 출연자 자체에 관련 지침이 없더라도 결과 코드는 더 느려진다.

예를 들어, 만약 당신이 포인터를 향해 int를 던지면, 옵티마이저는 포인터가 무엇을 가리키는지 모를 것이다.결과적으로, 그것은 아마도 그 포인터를 통한 쓰기가 어떤 변수라도 바꿀 수 있다고 가정해야 할 것이다.그것은 레지스터에 변수를 저장하는 것과 같은 매우 일반적인 최적화를 능가한다.

맞아, 하지만 생각해봐: 재해석_cast는 나쁜 디자인이거나 매우 낮은 수준의 디자인을 하고 있다는 것을 의미해.

대신, 런타임에 조회 테이블에서 조회해야 하기 때문에 다이내믹 캐스트에 비용이 소요될 것이다.

그래, 이건 사실이야.런타임 비용이 드는 주조 유형은 dynamic_cast이다.

맞아요.내가 덧붙일 수 있는 새로운 폭에서 지시를 수행하기 위한 성능상의 이득/손실 이외의 어떠한 비용도 드물게 우려할 뿐이다.내가 들어본 모든 플랫폼에서 포인터를 캐스팅하는 것은 비용이 들지 않고 성능 변화도 없다.

C++의 C 스타일 캐스팅은 static_cast를 먼저 시도하고, 정적 캐스팅을 수행할 수 없는 경우에만 재해석_cast를 실시한다.정적_캐스트는 다중 상속(또는 콘크리트 형식에 인터페이스를 주조할 때)의 경우 포인터의 값을 변경할 수 있으며, 이 오프셋 계산에는 추가적인 기계 명령이 포함될 수 있다.이것은 기껏해야 하나의 기계지시가 될 것이다. 매우 작다.

reinterpret_cast런타임 비용이 발생하지 않음..아무리 주의해도 의 모든 용법처럼reinterpret_cast구현이 정의된다.예를 들어, a를 재해석할 수 있다.char으로 배열하다int다른 유형들이 서로 다른 정렬 규칙을 가질 수 있기 때문에 배열은 대상 아키텍처가 인터럽트를 발생시킬 수 있다.

먼저 정확한 정보를 확인한 후 효율성에 대해 걱정하십시오.

나는 내 조립자 코드를 보고 있었는데, 그 전후로 주물 재해석 된 서명된 샤를 서명하지 않은 채를 보고 있었다.그 지시들은 서너 가지 더 늘어갔다.

int main()
{
 signed char i = 0x80;
 (unsigned char&)i >>= 7;
 return i;
}

나는 컴파일러가 SAR 명령 대신 SHL 명령을 사용하도록 하기 위해 서명되지 않은 char를 캐스팅하고 있었다. 그래서 비트의 새로운 이동은 내가 서명한 비트 값이 아닌 zer0s가 될 것이다.

컴파일러는 여전히 SAR 명령을 사용하는 것 같다.그러나 재해석된 캐스팅은 컴파일러가 더 많은 지시를 추가하게 만들었다.3~4개 더!

UTF8을 UTF16 문자열로 변환하는 내 유니코드 기능이 Win32 MultiByteToWideChar()보다 3배 가까이 느린 이유를 걱정했다.이제 캐스팅이 주요 요인 중 하나라는 것이 걱정이다.

아이러니하게도, 우리는 속도를 위해 재해석된 캐스팅을 사용한다.

참조URL: https://stackoverflow.com/questions/3575234/reinterpret-cast-cast-cost

반응형