표준 C++에서는 분명히 그렇지 않습니다. 휴대용 방식으로, 아마도 아닙니다. 때때로 특정 OS에서. 그 밖의 것이 없다면 자신 만의 실행 파일 크기를 열고 실행 파일의 헤더를 검사하여 스택 크기를 확인할 수 있습니다. [다음 문제는 물론 "얼마나 많은 스택이이 코드보다 먼저 사용되었는지"입니다. 이는 결정하기가 어려울 수 있습니다. "
코드를 별도의 스레드에서 실행하는 경우 많은 (낮은 수준의) 스레드 인터페이스에서 스택 (또는 스택 크기)을 지정할 수 있습니다 (예 : pthread_set_stacksize
또는 MS _beginthread
). 다시 말하지만 실제 스레드 코드에 도달하기 전에 얼마나 많은 공간이 사용되었는지 정확하게 알 수는 없지만 엄청난 양은 아닙니다.
물론 임베디드 시스템 (예 : 휴대 전화)에서 스택 크기는 일반적으로 매우 작습니다. 4K, 12K 또는 64KB는 매우 정상적입니다. 일부 시스템의 스택 크기보다 훨씬 작을 수도 있습니다.
또 다른 잠재적 인 문제점은 실제로 스택에 얼마나 많은 공간이 사용되는지를 알 수 없다는 것입니다. 컴파일 된 시스템에서 사실 이후에 측정 할 수 있습니다. 물론 스택 로컬 배열이 int array[25];
인 경우, 우리는 그것이 적어도 25 * sizeof(int)
을 차지한다는 것을 알 수 있습니다. 그러나 패딩이있을 수 있으며, 컴파일러는 레지스터 등을 스택에 저장합니다.
편집, 추가 고려 사항 : 나는 또한 많은 이점을 보지 못합니다. 두 코드 경로 :
if (enough_stack_space_for_something)
use_stack_based_algorithm();
else
use_heap_based_algorithm();
이렇게하면 상당한 양의 추가 오버 헤드 및 더 많은 코드는 일반적으로 임베디드/모바일 시스템에서 좋은 계획이 아닙니다.
Edit2 : 또한 메모리를 할당하는 것이 런타임의 주요 부분 인 경우, 예를 들어 블록 작성이 도움이 될 수있는 이유를 살펴볼 수 있습니다.
* nix에서 스크립트에
중복되지는 않지만 http://stackoverflow.com/q/1756285/1729885 –
을 살펴보십시오. 따라서 스택 크기를 동적으로 (런타임에) 결정하고 싶습니까? – ComFreek
나는 일반적인 해결책이 있다고 생각하지 않는다. 스택 크기는 스레드마다 다를 수 있습니다. –