강사님 말씀으로는
Go 에서는 기본적으로 함수의 리턴 위치가 stack 에 저장하지 않고 heap 에 위치한다고 한다.
Tucker의 Go 언어 프로그래밍책의 예제를 보다가 재귀 함수를 무한하게 호출해봤다.
코드 돌리기 전 htop
코드 돌린 후 htop
5백만번이 넘게 실행이 되고 죽지 않았고, 그동안 cpu, mem도 열심히 일하고 있다.
c같은걸로 짜면 금방 프로그램이 뻗는데 그 이유는 리눅스시스템(이 경우에는)의 스택 값이 작기 때문.
서버의 ulimit값을 보면
stack 값이 8k밖에 안되고, c코드로 돌려보면 금방 뻗는다.
break 없는 c코드
#include <stdio.h>
int sum(int i);
int main()
{
printf("%d\n", sum(10));
}
int sum(int i)
{
return i+sum(i-1);
}
Segmentation error가 나면서 종료된다.
Go를 계속 배워보자.