그것은 프로그램에 대한 스택 사용의 "높은 물 마크"를 줄이고, 수 가 프로그램의 전체 메모리 요구 사항을 줄일 수 있도록 경우.
예, 최적화에 따라 다릅니다. 옵티마이 저가 함수 호출을 인라인하면 모든 인라인 함수의 모든 변수가 하나의 큰 스택 프레임으로 래핑된다는 것을 알게 될 것입니다. 사용할 가치가있는 컴파일러는 [*] 인라이닝이 가능하므로 컴파일러에 의존하지 않습니다. 정확히 그것이 일어날 때, 다를 것입니다.
로컬 변수가 작 으면 시작시 자동으로 할당 된 것보다 더 많은 스택을 프로그램에서 사용하는 것이 거의 없습니다. 처음에받은 것을 지나치 지 않으면 않는 한, 전체 메모리 요구 사항에 아무런 차이가 없습니다.
스택에 여러 개의 큰 구조체 (여러 킬로바이트)를 넣거나 킬로바이트가 많은 메모리 인 컴퓨터를 사용하는 경우 전체 메모리 사용량에 차이가 발생할 수 있습니다. 따라서, "많은 지역 변수"에 의해 수십 개의 int
과 포인터가 있으면 아무런 의미가 없습니다. "많은 지역 변수"에 의해 10k 버퍼가 수십 개 또는 함수가 매우 깊어서 수십 개의 레벨이 수백 개가되는 경우 int
의 경우에는 가능한 한 최소한의 차이가있을 수 있습니다. OS 및 구성에 따라 다릅니다.
스택과 힙이 일반 RAM을 통해 서로 성장하고 중간의 여유 메모리가 둘 중 하나에 의해 동등하게 사용될 수있는 모델은 더 이상 사용되지 않습니다. 매우 제한된 시스템을 제외하고는 메모리 모델이 더 이상 그런 방식으로 설계되지 않았습니다. 현대 OS에서는 소위 "가상 메모리"가 있으며 스택 공간은 한 번에 한 페이지 씩 프로그램에 할당됩니다. 그들 중 대부분은 사용되는 스택의 페이지를 일반적으로 매우 큰 구성 한계까지 자동으로 할당합니다. 일부는 자동으로 스택을 확장하지 않습니다. 심비안은 최근에 사용했는데 몇 년 전 이었지만 심비안은 "현대"OS가 아닙니다. 임베디드 OS를 사용하는 경우 설명서에서 스택에 대해 말한 내용을 확인하십시오.
어느 쪽이든, 총 메모리 사용량에 영향을주는 것은 한 번에 얼마나 많은 스택 페이지가 필요한지입니다. 시스템이 스택을 자동으로 확장하면 사용중인 용량을 알지조차 모릅니다. 그렇지 않은 경우, 프로그램에 최고 수위 표시를 위해 충분한 스택이 제공되어야하며, 과도한 스택 사용을 감지 할 수 있어야합니다. 간단히 말해서, 이것은 이론적으로 차이를 만드는 것들 중 하나이지만, 실제로 차이는 거의 중요하지 않습니다. 프로그램이 실행되는 환경의 리소스에 비해 스택의 방대한 양을 사용하는 경우에만 중요합니다.
[*] 기본적으로 최적화되지 않은 어셈블러 인 C 컴파일러를 사용하여 PIC 등을 위해 C에서 프로그래밍하는 사람들 , 나는 그들의 컴파일러를 "사용 가치가 없다"고 불쾌감을 느낄 수있다. 이러한 장치의 스택은 "일반적인"시스템과 크게 다르므로 응답이 다릅니다.
메모리를 최소화하기 위해 코드를 구성하지 마십시오. 가장 이해하기 쉬운 방법으로 이해하고 이해하기 쉽습니다. 마이크로 최적화는 시간 낭비입니다. –
컴퓨터가 1970 년에 만들어 졌습니까? [PDP11] (http://en.wikipedia.org/wiki/PDP-11_architecture)와 같은 제한된 아키텍처입니까? –
아니요, 더 쉽게 읽을 수 있다면 더 효율적입니다. 프로그래머는 컴퓨터 메모리보다 훨씬 비쌉니다. –