2010-02-12 12 views
3

C에서 스택 크기를 동적으로 변경할 수 있습니까?스택 크기를 동적으로 변경할 수 있습니까?

예인 경우 어떻게?

+0

나는 당신의 질문을 이해하고 있는지 잘 모르겠습니다. 함수를 호출하거나 지역 변수가있는 블록을 입력하면 스택이 확장되지만 이것이 사용자가 찾고있는 해답이 아닌 것 같습니다. – AProgrammer

+1

작은 쪽 메모 : 현재 함수에서 현재 stacj에 공간을 확보하려면'alloca()'를 사용하십시오. (@AProgrammer) – imacake

답변

-3

왜이 작업을 수행해야합니까? 그것은 운영체제에 의존하며 C가 직접 관련되어있는 것은 아닙니다 (특정 링커 및 런타임 환경이 이러한 구성의 다양한 방법을 관리하지만).

어떤 OS가 있고 무엇을 성취하려고합니까?

+1

이것은 내가 싫어하는 종류의 답변입니다. "왜 누구가 그걸 할 것입니까?" 대답이없는 경우 침묵을 유지하십시오. 그는 아마도 물어볼 이유가 있습니다. 사실 같은 문제가있었습니다. 그 대답은 물론 google rlimit입니다. 그리고 저는 여전히 창문에 대한 대답이 없습니다 ... 질문에 대답하십시오 : 사용자가 대화 형 개발 환경이나 언어 인터프리터를 구현해야하는 경우, 사용자가 임의의 스크립트를 입력하여 실행할 수있는 경우 어떻게해야합니까?스크립트가 많은 스택 (재귀 적 스택)을 필요로한다면, 런타임 시스템은이를 지원해야합니다 (스택 오버 플로우를 잡아 한계를 바꾸고 계속 진행하십시오). 맞습니까? – blabla999

+3

@ blabla999 : 나는 언제나 설명이있는 downvote를 가지고있어서 기쁩니다. 특히 깊은 깊은 말입니다. 반성 할 때,이 '탐구 질문'은 주석이어야합니다. 정보 내용면에서, 당신이 생각한 ~ kotlinski의 대답입니다. 결론은 제가 프로세스를 돕기 위해 노력한 것입니다. 때로는 질문 주석에 "cmon, more detail"을 추가하고 투표를하면 가끔 해답을 반으로주고 계속 진행하여 수행합니다. 그러나 당신의 입장에 대한 건전한 토대를 갖고 있으며,이 말을 덧붙여 설명을 더 많이하는 것으로 받아 들일 것입니다. –

2

동적으로 코드가 실행되는 동안 스택 크기를 변경한다는 의미입니까? AFAIK, 할 수 없어요. 그러나 응용 프로그램을 실행하기 전에 스택 크기를 설정할 수 있습니다. linux에서 "ulimit -s"명령을 사용하면 쉘에서 실행되는 모든 프로세스의 스택 크기를 설정할 수 있습니다.

프로젝트 등록 정보 -> 링크 옵션 -> 출력 -> 스택 할당 -> 예약에서 스택 크기를 설정하여 해당 프로젝트의 VC6에서 동일한 작업을 수행 할 수 있습니다. 나는 VC8에 대해 알지 못한다. 그러나 그런 옵션들이 가능할 수도있다.

0

일반적으로 주소 공간을 스택에 예약해야하기 때문에 견고하게 수행 할 수없는 작업입니다. 개체가 이미 새 스택 영역에있는 주소로 힙에 할당 된 경우 큰 문제가 발생합니다. 주소 공간보다 적은 메모리를 가진 시스템에서는 가능할 수도 있지만, 허용하는 많은 시스템을 보게 될지 의심 스럽다. C는 그러한 메커니즘을 요구하거나 지원하지 않습니다.

0

아니요, 이것은 C의 범위를 벗어납니다.

3

사용하는 OS에 따라 다릅니다.

유닉스/리눅스에서는 RLIMIT_STACK 리소스에 POS30 syscall setrlimit()을 사용할 수 있습니다.

자세한 내용은 man setrlimit을 참조하십시오.

1

Linux의 단일 스레드 프로그램에서 스택은 메모리 공간의 다른 것으로 충돌 할 때까지 자동으로 커집니다. 이것은 일반적으로 힙 (heap)이며 32 비트 시스템에서는 일반적으로 여러 GB의 스택을 가질 수 있습니다.

멀티 스레드 프로그램에서 다른 스레드의 스택이 진행될 때 일반적으로 불가능합니다.

새 스레드를 만들 때 스택 크기를 제어 할 수 있지만 아키텍처에 따라 다르므로 일반적으로 작업에서 얼마나 많은 스택이 필요합니까?

꽤 낮은 수준의 내용이고 주로 C 라이브러리/스레딩 라이브러리에 의해 제어됩니다. 당신의 위험에 어슬렁 거리세요 :)

+0

기술적으로 가상 메모리를 사용하면 스택을 성장시키기위한 공간을 만들기 위해 물건을 움직일 수 있어야합니다. 따라서 멀티 스레딩 프로그램도 지원되는 경우 동적 스택을 가질 수 있습니다. – doc

관련 문제