이 질문은 당신에게 바보처럼 보일 수 있지만 대답을 찾지 못했고 생각했던대로 작동하는지 확인하고 싶습니다. c - 정의 된 값이 하드 코드 된 숫자보다 느리다
최근에이 코드를 건너 왔어요 :void RDP_G_SETBLENDCOLOR(void)
{
Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
}
}
내가 (1/255을 의미)을 0.0039215689f 하드 코딩 최적화 이유 인 것으로 알고 있습니다. 이제 가독성을 위해 을 정의하고 싶다고 상상해보십시오. 여기에서 선택한 이름이 좋지 않더라도 예제 만 있습니다.
#define PIXEL_VALUE 0.0039215689f
void RDP_G_SETBLENDCOLOR(void)
{
Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * PIXEL_VALUE;
Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * PIXEL_VALUE;
Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * PIXEL_VALUE;
Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * PIXEL_VALUE;
if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
}
}
이렇게하면 코드 실행 속도가 느려 집니까?
번역 단위가 컴파일하기 전에, macroses가 확장됩니다. – zerkms
컴파일러는이 모든 것을 처리하고, 번역 작업 중 하나를 가능한 한 읽기 쉽고 유지 보수 할 수있게 만들고 컴파일러가 어셈블러 생성을 염려하게 만듭니다. – SPlatten
* 0.0039215689f (1/255 참조)는 최적화를 위해 하드 코딩됨을 이해합니다. * 좋은 컴파일러는 컴파일 타임에 '1/255'를 자동으로 '0.0039215689f'로 변환합니다. – tilz0R