gcc에서 a++를 레지스터 거치지 않고 바로 덧셈하게 해주는 키워드가 무엇인가요??
글쓴이: criny333 / 작성시간: 월, 2014/06/16 - 2:02오전
아래 c언어 문장
***********
int a = 0;
main(){
a++;
}
***********
를 gcc로 컴파일 하면 "a++" 부분이
아래와 같은 어셈코드(nasm기준)로 생성됩니다.
***********
mov eax, dword[0xXXXXXXXX]
add eax, 0x01
mov dword[0xXXXXXXXX], eax
***********
이렇게 생성되지 않고 바로 메모리 덧셈을 실행시키는 어셈블리코드
***********
add dword[0xXXXXXXXX], 0x01
***********
이렇게 생성시키는 c언어 키워드나 다른 gcc시 옵션같은 것이 있나요?
ps) 원래 변수 선언시에 volatile 붙이면 저렇게 되는줄 알았지만, volatile은 다른 용도로 사용되더라구요...
Forums:
gilgil.net
memory 자체를 register의 도움 없이 증가(increment)되는 assembly op code가 존재하지 않는한 컴파일러에서 아무리 지지고 볶아도 안됩니다.
> memory도 add, sub등의 연산이 이루어 지네요. 제가 잘못 알고 있었습니다.
www.gilgil.net
혹시 volatile 찾으시는 건가요? 그런 용도로
혹시 volatile 찾으시는 건가요?
그런 용도로 쓰는 사람이 있는데 의도와 맞지 않는 용법이고
잘못된 용법입니다.
atomic하게 변수의 값을 증가시키시려는
atomic하게 변수의 값을 증가시키시려는 거면
기존에 제공되던 GCC atomic함수들(https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html)이나
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html 를 참고하시면 될 것 같습니다.
레지스터로 읽지 않고 메모리를 바로 변경할 수 없는 아키텍처가 존재하기 때문에 말씀하신 그대로의 키워드는 제공되기 힘들 것 같습니다.
답변 정말감사합니다
답변 정말감사합니다
댓글 달기