Thinking Different




Visual Studio환경에서 작성한 프로그램에서 stack overflow가 발생되었다면, 프로젝트 속성에서 지정한 stack의 크기를 벗어났음을 의미한다.

예를들어 아래 코드와 같이 사용자가 임의로 stack 크기를 지정하지 않은 상태에서 아래와 같이 변수 메모리를 할당하였다면, stack overflow가 발생될것이다.



MS Visual Studio에서 default로 정해진 stack size는 1M byte 이다. (1024 * 1024 * 1)
아래와 같이 '스택 예약 크기' 가 0으로 지정되어 있으면 default값으로 1MB의 스택사이즈를 가진다.




따라서 더 큰 사이즈의 stack을 사용하고싶다면 2가지 방법이 있다.

1. 아예 동적으로 힙 공간을 사용하는 방법이다... new delete나 malloc free로 할당하면 heap공간은 유연하게 늘어나고 줄어드는 사용자 메모리를 할당할 수 있다. 

2. Visual Studio에서 제공되는 스택사이즈를 조절할 수 있다. 
프로젝트 - 속성 - 링커 - 시스템에서 stack reserve size(스택예약크기)를 변경해주면된다.

계산은 1024*1024*1 == 1MB 로 계산한다..   
예를들어10MB를 사이즈로 넣고 싶다면 1024*1024*10 = 10485760
stack reserve size 란에 10485760을 넣으면 10MB로 스택사이즈를 변경할 수 있다.


위 예시는 10MB를 기본 스택사이즈로 할당한 것이다.

개인적으로 생각할때 가장 좋은 코딩기법은 heap과 스택을 적절히 사용하는게 가장 좋은 방법이라고 생각한다. heap을 너무 많이 사용하면 동적시의 new delete시의 오버헤드가 많아서 영향을 끼칠것이고, 스택을 너무 많이 사용하면 프로그램의 전체적인 메모리 효율성이 떨어지기 때문이다.