[Go] 함수의 리턴값은 힙메모리에 위치

Seunghyun Moon·2022년 10월 6일
0

Go

목록 보기
1/2

Go 언어를 배우던 중 안정성 측면에서 장점이라고 할만한 점을 발견해서 공유한다.

강사님 말씀으로는

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를 계속 배워보자.

profile
I live fullest

0개의 댓글