GNU 컴파일러를 사용하여 Linux용 C 애플리케이션의 스택 크기 조정
Linux에서 GNU 컴파일러로 컴파일된 C 애플리케이션의 스택 크기 스택 오버플로 오류를 방지하기 위해 수정할 수 있습니다. OSX에서 사용되는 구문(LD_FLAGS= -Wl,-stack_size,0x100000000)이 SUSE Linux에서 작동하지 않을 수 있지만 동일한 결과를 얻을 수 있는 대체 방법이 있습니다.
한 가지 접근 방식은 프로그래밍 방식으로 스택 크기를 늘리는 것입니다. 응용 프로그램 자체. 이는
#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; }
애플리케이션 내에서 스택 크기를 늘리면 스택 오버플로 오류 없이 복잡한 작업이나 대규모 데이터 구조를 처리하는 데 충분한 메모리 할당이 있는지 확인할 수 있습니다. 그러나 getrlimit/setrlimit 코드가 적용되기 전에 스택 오버플로를 방지하려면 main에서 호출되는 함수에서 지나치게 큰 지역 변수를 선언해야 한다는 점에 유의하는 것이 중요합니다.
위 내용은 GNU 컴파일러를 사용하여 Linux에서 C 애플리케이션의 스택 크기를 조정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!