[질문: 코드비교] 어느 쪽이 대략 얼마나 더 빠를지 예측할 수 있을까요?

akihajj의 이미지

Foo::doTaskOnState() 메소드 기준으로,
가능하면 CPU사이클 기준으로 속도를 비교하고 싶습니다.

/*===================================*/
/*=========1. STATE 분기처리=========*/
/*===================================*/
 
enum State
{
	STATE_1,
	STATE_2,
	STATE_3,
};
 
class Foo
{
	State state;
 
	inline void taskOnState1(){/*do nothing*/}
	inline void taskOnState2(){/*do nothing*/}
	inline void taskOnState3(){/*do nothing*/}
 
	void doTaskOnState()
	{
		switch(state)
		{
			case STATE_1:
				taskOnState1();
				break;
			case STATE_2:
				taskOnState2();
				break;
			case STATE_3:
				taskOnState3();
				break;
		}
	}
};

---------------------------------------------------------------------------------------------------------

2. 위의 분기처리를 handler로 묶은 것

/*===================================*/
/*2. 위의 분기처리를 handler로 묶은 것*/
/*===================================*/
 
class IStateHandler
{
	virtual void doTaskOnState() = 0;
}
 
class State1Handler : IStateHandler
{
	void doTaskOnState(){/*do nothing*/}
}
 
class State2Handler : IStateHandler
{
	void doTaskOnState(){/*do nothing*/}
}
 
class State3Handler : IStateHandler
{
	void doTaskOnState(){/*do nothing*/}
}
 
class Foo
{
	IStateHandler handler;
 
	void doTaskOnState()
	{
		handler.taskOnState1();
	}
};
세벌의 이미지

돌려 보셔요.

jick의 이미지

뭘 하든 실제로 doTaskOnState()에서 하는 일에 쓰이는 시간이 90% 이상이고 1번과 2번의 성능 차이는 대세에 아무 영향 없을 가능성이 매우 높습니다.

그러니까 그냥 둘 중에 전체 프로그램 구조에 더 적합한 걸로 쓰세요. 나중에 성능 문제가 생기면 profile 떠보고 이부분에 문제가 있으면 (그럴 확률 0.0001%?) 그때 고민하시면 됩니다.