c언어 참조되지 않는 변수 최적화 방지 기법?
글쓴이: chocokeki / 작성시간: 월, 2019/03/25 - 1:55오후
안녕하세요
가끔 일부 코드만 최적화를 방지해야 하는 경우가 있는데요
예를 들어 다음과 같습니다
아래 코드 설명을 첨가하자면 에러가 발생하면 무조건 hw에서 레지스터를 1회 읽어야 해당 레지스터가 클리어 되는 경우가 있습니다
그래서 tmp에 데이터를 옮겨넣고 tmp의 역할은 끝이납니다(다른곳에서 참조 x)
volatile uint32_t tmp;
if 에러
tmp = read_register(hw_address);
그래서 걱정이 되는 경우가 있는데요 tmp가 단순히 읽기만 하고 다른곳에서 참조를 하지 않기 때문에 최적화로 사라지는 문제가 생길까봐요
혹시 이런 경우에 대비할 뭔가 좋은 방법이 없을까요?
Forums:
volatile이라고 지정하는 것만으로 충분합니다.
volatile이라고 지정하는 것만으로 충분합니다.
volatile 변수를 읽거나 뭔가를 쓰는 것은 컴파일러가 절대 손을 댈 수가 없습니다.
감사합니다
감사합니다
애초에 read_register() 가 hw
애초에 read_register() 가 hw_address 를 꼬박꼬박 접근하라는 법도 없기 때문에 hw_address 에 volatile 이 붙도록 코드가 만들어져 있을 겁니다.
COR(clear-on-read) 외에도 read 해야만 written 이 보장되는 경우도 종종 있지만, 임시 변수 같은 것을 쓰면서까지 코드를 만들지는 않고 그냥 read 만 하게 만들죠.
read 건 write 건, 앞서 말씀드린 이유로 자체적인 최적화 장벽을 가져야하기 때문에 신경을 따로 더 쓰실 것은 없습니다.
댓글 달기