최신 Linux에서 기본 스택 크기가 8MB(일부 배포판에서는 10MB)로 너무 큰 이유는 무엇입니까?

최신 Linux에서 기본 스택 크기가 8MB(일부 배포판에서는 10MB)로 너무 큰 이유는 무엇입니까?

예를 들어 OSX에서는 512k보다 훨씬 작습니다.

권장 사이즈가 있나요?이 애플리케이션은 재귀를 사용하지 않으며 대규모 스택 변수를 할당하지 않는다는 점을 명심하세요.?
이 질문이 너무 광범위하고 사용법에 따라 크게 달라진다는 것을 알고 있지만, 몇 가지 질문이 있는지 알고 싶었기 때문에 여전히 묻고 싶었습니다.숨겨진/내부/시스템 이유이 엄청난 숫자 뒤에.


내 애플리케이션의 스택 크기를 512KiB로 변경할 계획이므로 궁금합니다. 이는 여전히 큰 숫자처럼 들리지만 8MiB보다 훨씬 작으며 프로세스의 가상 메모리가 크게 줄어듭니다. , 스레드(I/O)가 많기 때문입니다.

나도 이거 알아별로 아프지 않습니다. 여기에 좋은 설명이 있습니다.:pthread의 기본 스택 크기

답변1

다른 사람들이 말했듯이, 그리고 질문에 제공한 링크에서 언급했듯이 8MiB 스택을 사용하는 것은 해를 끼치지 않습니다(주소 공간을 소비하는 것 외에는 64비트 시스템에서는 중요하지 않습니다).

Linux는 오랫동안 8MiB 스택을 사용해 왔습니다.버전 1.3.71995년 7월 커널이 이를 출시했습니다. 당시에는 이전에 제한이 없었던 곳에 제한을 도입한 것으로 간주되었습니다.

스택을 합리적인 기본값으로 제한하십시오. 필요한 경우 루트는 항상 이 제한을 늘릴 수 있습니다. 8MB가 적당해 보입니다.

Linux에서 스택 제한은 프로그램 매개변수와 환경 크기에도 영향을 미치며, 이는 다음으로 제한됩니다.스택 한도의 1/4;커널은 매개변수와 환경이 최소 32페이지를 갖도록 강제합니다.

스레드의 경우 스택 제한( RLIMIT_STACK)이 무제한인 경우pthread_create새 스레드의 스택에 자체 제한을 적용합니다. 대부분의 아키텍처에서 이 제한은 8MiB 미만입니다.

답변2

8MB 예가상스택의 크기입니다. 애플리케이션이 현재 물리적으로 할당된 것보다 더 많은 스택을 사용하려고 하면 페이지 오류가 발생합니다. 그런 다음 커널의 페이지 폴트 핸들러는물리적페이지와 귀하의 신청은 계속됩니다.

바라보다https://unix.stackexchange.com/a/280865/21212완전한 설명을 위해.

따라서 스택 크기를 줄이세요~해야 한다애플리케이션의 물리적 메모리 사용량을 줄이는 데는 영향이 없습니다.

관련 정보