setrlimit와 제한 스택의 동작 차이점

setrlimit와 제한 스택의 동작 차이점

쉘과 C 프로그램 내부에서 스택 크기를 설정할 때 동작의 차이를 발견했습니다. 문제는 많은 지역 변수(큰 배열)가 포함된 함수가 있다는 것입니다.

내가 다음을 수행하면

limit stack 256000

내 C 프로그램은 실패 없이 계속 실행되지만 함수 호출 시 내부의 동일한 값이 충돌합니다.

함수를 호출하기 전에 main의 처음 몇 줄은 다음과 같습니다.

struct rlimit lim = {256000*1024, 256000*1024};
int x=setrlimit(RLIMIT_STACK, &lim);
if(x!=0) {
    printf("Error in setrlimit);
}

setrlimit는 오류를 발행하지 않습니다.

그 외에는 특정 플랫폼(SuSE 11)에만 해당되는 것으로 보이며 모든 운영 체제에서 발생하지는 않습니다.

프로그램에 의해 증가된 스택 크기가 유효한지 어떻게 확인합니까? 또 다른 점은 setrlimit에 큰 값을 넣어도 아무런 효과가 없다는 것입니다.

답변1

setrlimit(RLIMIT_STACK)이 적용되는 방법은 플랫폼에 따라 다르며 매우 다양합니다.

프로세스의 한계를 확실히 늘리려면 가장 좋은 방법은 프로세스가 시작되기 전에 (귀하의 질문에서 지적했듯이) 셸에서 설정하는 것입니다. 그 이후부터는 무슨 일이 있어도 적용되기 때문입니다. 발생 프로세스가 스레드되어 있습니까? 아니면 플랫폼이 따르는 구현의 구체적인 세부 사항은 무엇입니까?

관련 정보