임베디드 SW 프로젝트의 경우 const volatile TYPE *
포인터를 사용해야합니다. 이제 다음과 같은 몇 가지 계산 함수가 있습니다.const volatile 포인터 함수 인수
uint8 calc(const volatile uint8 *array, uint8 value) { ... }
두 변수의 데이터는 함수 실행 중에 변경되지 않습니다.
호출하는 코드처럼 보이는 다음
const volatile uint8 *array = (const volatile uint8 *)0x00010111;
uint8 value = 8;
uint8 result = calc(array, value);
을 질문 지금, 우리는 휘발성 인수없이 calucation 기능을 설계 할 경우 차이가있을 것입니다 :
uint8 calc(const uint8 *array, uint8 value) { ... }
를 호출 우리의 경우 휘발성을 버리십시오.
uint8 result = calc((const uint8 *)array, value);
두 번째 솔루션에 대한 장점은 더 유연합니다. y : 비 휘발성 변수에도이 함수를 사용할 수 있습니다. 그러나 우리가 변동성을 제거하고 컴파일러가 강력한 최적화를 수행한다면 이것이 효과가 있습니까?
아마도 아무런 차이가 없습니다. –
아마도 차이는 없겠지만 컴파일러는 많은 작업을 수행 할 수 있으며 생성 된 기계 코드를 확인하는 유일한 방법은 알 수 있습니다. 캐스트에 대해 생각하는 한 가지 방법은 컴파일러에게 "나는 당신보다 더 잘 압니다"라고 말하고 있다는 것입니다. 이 경우에는 그렇지 않습니다. – msw