C에서는 특정 애플리케이션의 특정 메모리 요구 사항을 충족하기 위해 컴파일 중에 스택 크기를 조정할 수 있습니다. . LD_FLAGS 옵션은 g 를 사용하는 macOS에서 잘 작동하지만 SUSE Linux와 같은 Linux 배포판은 다른 접근 방식을 사용합니다.
GCC를 사용하여 단일 애플리케이션에 대해 Linux에서 스택 크기를 늘리려면 일반적으로 두 가지 주요 방법이 사용됩니다.
ulimit -s 명령은 특정 사용자 또는 프로세스에 대한 스택 크기 제한을 설정하는 데 사용할 수 있습니다. 그러나 이 방법을 사용하려면 높은 권한이 필요하며 애플리케이션을 시작하기 전에 실행해야 합니다. 예:
ulimit -s unlimited
또는 setrlimit를 사용하여 애플리케이션 코드 내에서 스택 크기를 프로그래밍 방식으로 설정할 수 있습니다. 이 방법은 이식성이 더 뛰어나며 애플리케이션이 런타임에 스택 크기를 동적으로 조정할 수 있게 해줍니다. 다음 코드 조각은 스택 크기를 16MB로 늘리는 방법을 보여줍니다.
#include <sys/resource.h> int main (int argc, char **argv) { const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB struct rlimit rl; int result; result = getrlimit(RLIMIT_STACK, &rl); if (result == 0) { if (rl.rlim_cur < kStackSize) { rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if (result != 0) { fprintf(stderr, "setrlimit returned result = %d\n", result); } } } // ... return 0; }
이 방법을 사용하더라도 스택 오버플로가 발생하기 전에 main()에서 큰 지역 변수를 선언하지 않는 것이 중요합니다. 스택 크기 조정이 적용됩니다.
위 내용은 Linux에서 C 애플리케이션의 스택 크기를 어떻게 변경할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!