Gcc Option Force Mem
|
GccOptionForceMem입니다.
-fforce-mem ¶사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 하기 전에, 메모리 operand를 먼저 register로 불러옵니다. 아시다시피, 메모리에서 값을 읽는 것은 레지스터에서 읽는 것보다 느립니다. 연산을 수행하기 전에, 메모리에 저장되어 있는 값을 레지스터로 불러와서 작업을 수행하기 때문에, 메모리에 있는 값에 많은 연산을 할 경우, 이 옵션을 쓰면 속도 향상을 기대할 수 있습니다:
int global_int;
void bar(int a, int b) { global_int = a + b; } 위 소스를 x86 시스템에서 gcc로 컴파일하면 다음과 같은 어셈블 출력을 얻을 수 있습니다:
; **** void
; **** bar(int a, int b) ; **** { pushl %ebp movl %esp, %ebp ; **** global_int = a + b movl 12(%ebp). %eax addl 8(%ebp), %eax movl %eax, global_int ; **** } popl %ebp ret 아래 소스는 똑같은 C 소스를 -fforce-mem 옵션을 써서 어셈블한 것입니다 (위의 어셈블 리스트와 비교해보시기 바랍니다. 특히 덧셈을 수행하는 부분인 'addl' 명령 부분을 잘 보기 바랍니다):
; **** void
; **** bar(int a, int b) ; **** { pushl %ebp movl %esp, %ebp ; **** global_int = a + b; movl 8(%ebp), %eax movl 12(%ebp), %edx addl %edx, %eax movl %eax, global_int ; **** } popl %ebp ret -fforce-mem 옵션을 쓴 경우, EBP가 가리키는 메모리에 직접 더하는 방식을 쓰지 않고, 일단 먼저 메모리에 있는 값인 8(%ebp)를 EAX 레지스터에 불러온 다음에 덧셈을 하는 것을 알 수 있습니다.
|
Money may buy friendship but money can not buy love. |










