define 문과 포인터 간단한 질문 문의 드려요
글쓴이: chocokeki / 작성시간: 화, 2020/03/03 - 9:56오전
클럭이 낮은 임베디드 환경입니다
최적화를 위해 고민 중인데요
//후보 #1 inline volatile struct hw_reg* get_hw_addr(void) { return (volatile struct hw_reg*) (&hw->peri[27]); } //후보 #2 - hw->peri[27] 의 주소를 직접 적는다 #define (volatile struct hw_reg*) (0x12345678ul)
후보1은 빌드할 때 hw->peri[27]이 컴파일러에 의해 offset이 자동 계산되어서 바뀌는 것이 아니라 실행하고 나서 직접 접근하여 가져오고
후보2는 다이렉트로 hw 주소로 접근하는게 맞죠?
대략 어셈 2~3개 차이 일꺼 같은데 맞는지요?
Forums:
맞습니다.
맞습니다.
만약 성능때문에 최적화를 고민하신다면 반복문(loop)을 집중적으로 보시는 것을 추천드립니다.
그건
항상 그렇진 않고 상황마다 다릅니다. 사람이 보고 후보 1을 후보 2로 일반적으로 바꿀 수 있는 상황이라면 컴파일러 역시 많은 부분 그렇게 하거든요. 컴파일 해서 생성된 어셈블리를 비교해 보시거나 좀더 편한 방법으로는 컴파일러마다 코드 제너레이터에 넘겨주는 IR을 덤프하는 옵션이 있으니 그걸 이용해서 생성된 코드를 보세요.
그리고 사실 당연한 얘기지만 어디가 bottle neck인지를 보고 거기를 줄이는 게 더 중요할 것 같습니다.
댓글 달기