>백엔드 개발 >C++ >Linux에서 C 애플리케이션의 스택 크기를 어떻게 변경할 수 있습니까?

Linux에서 C 애플리케이션의 스택 크기를 어떻게 변경할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-24 20:03:22987검색

How Can I Change the Stack Size for C   Applications in Linux?

GNU 컴파일러를 사용하여 Linux에서 C 애플리케이션의 스택 크기 변경

C에서는 특정 애플리케이션의 특정 메모리 요구 사항을 충족하기 위해 컴파일 중에 스택 크기를 조정할 수 있습니다. . LD_FLAGS 옵션은 g 를 사용하는 macOS에서 잘 작동하지만 SUSE Linux와 같은 Linux 배포판은 다른 접근 방식을 사용합니다.

GCC를 사용하여 단일 애플리케이션에 대해 Linux에서 스택 크기를 늘리려면 일반적으로 두 가지 주요 방법이 사용됩니다.

ulimit -s 명령

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.