[질문] 재귀호출 시 약간의 문제 ...
글쓴이: cjynim / 작성시간: 금, 2007/04/13 - 5:52오후
#include
#include
void recursive(void) {
int* memory = (int*)malloc(sizeof(int));
recursive();
}
int main(void) {
recursive();
return 0;
}
처음에는 위 처럼 프로그램을 작성해서 컴퓨터의 메모리 자원을 고갈 시켜 보려고 했는데
이상하게 얼마안가서 프로그램이 종료 되어 버리더라구여 ~
그래서 int* memory = (int*)malloc(sizeof(int));을 지우고 printf("1"); 이런게
재 작성해서 실행을 시켜보니 1이 약 화면 반페이지 정도 출력되고 프로그램이 종료 되는데
위의 코드를 보면 분명히 무한으로 재귀되도록 해 놓았는데 왜 이러한 현상이 발생하는거죠?
Forums:
POSIX 계열이면 limit
POSIX 계열이면 limit 혹은 ulimit 혹은 getrlimit 함수 등으로 stack 사이즈 확인하세요
아마 malloc 으로 인한 heap 제한보다 재귀 호출로 인한 stack 제한이 먼저 오는 듯 합니다.
함수 호출시에도 stack 을 사용합니다.
예진아씨
윗분 말씀대로 스택이 넘쳤을 수가 있으니 tail call optimization 옵션 넣고 컴파일해 보세요.
임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
댓글 달기