Warning C6262 Function uses '65564' bytes of stack: exceeds /analyze:stacksize '16384'. Consider moving some data to heap.
아래와 같은 코드를 빌드하면,
#define SIZE 65536
static int check(char* file)
{
uint8_t buffer[SIZE];
}
컴파일 시, 이런 경고가 뜹니다.
Warning C6262 Function uses '65564' bytes of stack: exceeds /analyze:stacksize '16384'. Consider moving some data to heap.
문서에도 나오지만,
C6262
; https://learn.microsoft.com/en-us/cpp/code-quality/c6262
User mode의 응용 프로그램을 개발할 때는 무시해도 상관없습니다. 컴파일러마다 다르지만 보통은 기본 스택 크기가 1MB이고, 또한 그 크기도 원한다면 늘릴 수 있기 때문에 64KB의 스택을 할당하는 것이 크게 문제가 되지 않을 수 있습니다.
그런데도 이런 경고를 띄우는 것은, 어쨌든 스택을 과다하게 사용하는 것은 좋지 않으므로 16KB가 넘어가는 스택 할당에 대해서는 힙 할당을 권장하는 것뿐입니다.
일단, Visual C++의 경우 컴파일 경고는 다음과 같이 "C++" 옵션에서 새로운 크기를 지정하는 것으로 가능합니다.
/analyze:stacksize 65564
하지만, 그래도 "Error List" 창에서의 경고는 없애지 못합니다.
아마도 이것은 "Analyzer"가 정적 분석으로 보여주는 것이므로 C++의 컴파일 옵션을 조정하는 것이 반영되지 않는 듯합니다. 따라서, 깔끔하게 없애려면 결국 스택이 아닌 힙 할당으로 바꿔야 합니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]