2011년 2월 23일 수요일

stack overflow , 컴파일 옵티마이저 레벨

stack overflow
옵티마이저 레벨에 따라 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가 발생한다.



컴파일러 최적화를 하면 오히려 스택오버플로우가 발생하지 않는것일까?


댓글 없음: