옵티마이저 레벨에 따라 SIGSEGV가 나지 않고 무한 대기 할때가 있다.
$ gcc -O3 stack_overflow.c -o stack_overflow
$ ./stack_overflow
$ gcc -O2 stack_overflow.c -o stack_overflow
$ ./stack_overflow
$ gcc -O1 stack_overflow.c -o stack_overflow
$ ./stack_overflow
세그멘테이션 오류
$ cat stack_overflow.c
int foo()
{
return foo();
}
int main(int argc, char * argv[])
{
foo();
}
x86_64 linux에서 gcc 4.1.2
-O3, -O2 는 위코드가 무한대기 ctrl + c로 중지 시킨것이고
-O1 에서는 SIGSEGV가 발생한다.
컴파일러 최적화를 하면 오히려 스택오버플로우가 발생하지 않는것일까?
댓글 없음:
댓글 쓰기