예를 들어 OSX의 경우 512k 미만입니다.
앱이 재귀를 사용하지 않고 많은 스택 변수를 할당하지 않는다는 점을 염두에두고 권장되는 크기 가 있습니까?
나는 질문이 너무 광범위하고 사용법에 따라 크게 다르다는 것을 알고 있지만 이 거대한 숫자 뒤에 숨겨진 / 내부 / 시스템 이유 가 있는지 궁금해하고 있기 때문에 여전히 묻고 싶었습니다 .
내 앱에서 스택 크기를 512 KiB로 변경하려고 시도하면서 궁금합니다. 이것은 여전히 큰 숫자처럼 들리지만 8MiB보다 훨씬 작습니다. 프로세스의 가상 메모리가 크게 줄어 듭니다. 많은 스레드 (I / O)가 있습니다.
나는이 알고 잘 여기에서 설명하는, 정말 다치게하지 않습니다 : 의 pthreads의 기본 스택 크기
답변
다른 사람들이 말했듯이 귀하의 질문에 제공하는 링크에서 언급했듯이 8MiB 스택을 가져도 주소 공간을 소비하는 것 외에는 64 비트 시스템에서 문제가되지 않습니다.
리눅스는 매우 오랫동안 8MiB 스택을 사용했다. 이 변경 사항은 1995 년 7 월 커널 1.3.7 버전 에서 도입되었습니다 . 이전에는 제한이 없었습니다. 이전에는 하나도 없었습니다.
스택을 정상적인 기본값으로 제한하십시오. root는 필요할 경우 항상이 제한을 늘릴 수 있습니다. 8MB가 합리적입니다.
Linux에서 스택 제한은 프로그램 인수 및 환경의 크기에도 영향을 미치며 스택 제한의 1/4로 제한됩니다 . 커널은 인수와 환경에 대해 최소 32 페이지를 시행합니다.
스레드의 경우 스택 제한 ( RLIMIT_STACK
)이 무제한 인 pthread_create
경우 자체 스레드 제한을 새 스레드 스택에 적용하며 대부분의 아키텍처에서 8MiB 미만입니다.
답변
8MB는 스택 의 가상 크기입니다. 응용 프로그램이 현재 물리적으로 할당 된 것보다 더 많은 스택을 사용하려고하면 페이지 오류가 발생합니다. 그런 다음 커널의 페이지 결함 핸들러가 실제 페이지 를 할당 한 후 응용 프로그램이 계속됩니다.
자세한 설명 은 https://unix.stackexchange.com/a/280865/21212 를 참조 하십시오 .
당신의 스택 크기를 줄이는 그래서 해야 응용 프로그램의 실제 메모리 사용량 감소에 영향을주지 않습니다.