2016-08-02 2 views
0
  1. 스택 메모리 만 있고 힙 메모리가 없으면 문제는 무엇이 생성됩니까? 나는 그것이 프로그램을 매우 빠르게 만들 것이라고 생각한다.
  2. 개체가 힙 메모리에서 만들어지는 것을 알고 있습니다. 개체가 스택 메모리에 만들어지면 문제는 무엇입니까? 왜 힙 메모리를 만들었습니까?

읽었습니다.1. 왜 스택 메모리의 크기가 고정되어 있습니까?

스택

very fast access 
don't have to explicitly de-allocate variables 
space is managed efficiently by CPU, memory will not become fragmented 
limit on stack size (OS-dependent) 

variables can be accessed globally 
no limit on memory size 
(relatively) slower access 
no guaranteed efficient use of space, memory may become fragmented over time as blocks of memory are allocated, then freed 
you must manage memory (you're in charge of allocating and freeing variables) 
variables can be resized using realloc() 
+0

스택이 힙보다 액세스가 빠르다는 생각은 부분적으로 사실입니다. 스택에 * 공간을 할당하는 것이 힙 메모리를 할당하는 것보다 빠르다는 것이 사실이지만, 그 후에 메모리 액세스는 메모리 액세스입니다.스택의 현재 상단에 가까운 것이 캐시에있을 가능성이 높지만 스택에 많은 것을 할당하면 그 혜택도 사라집니다. –

답변

2
내가 스택의 힙/단점 장점으로 시작할 것

:

1. 배부하기 위해 독립적 인 해방 : 이것은이다 당신의 질문에 대한 가장 중요한 대답. 스택 기반 메모리 만있는 경우 즉시 스택 맨 위에 있지 않으면 메모리 영역을 즉시 해제 할 수 없습니다. 그러나 힙을 사용하면 할당 요청 순서에 관계없이 메모리를 확보 할 수 있습니다. 동적 인 소프트웨어에서와 마찬가지로, 소프트웨어의 라이프 사이클 전반에 걸쳐 무료 요청의 순서를 알기를 기대할 수는 없기 때문에 스택 메모리를 항상 사용하고 싶지는 않습니다.

2. 시스템 전체 스택 크기 결정 : 또 다른 관련 점은 스택 메모리 만 사용 되었다면 시스템의 모든 스레드가 고정 메모리를 갖게된다는 것입니다. 이 경우 이상적인 기본 스레드 스택 크기를 결정하는 것이 쉽지 않습니다. 그러면 메모리가 과도하게 소모됩니다. 따라서 실제로 메모리가 충분하지 않은 경우에도 메모리 부족 문제가 발생할 수 있습니다. 이것에 대해서는 다음과 같이 제안합니다 : http://linuxtips.manki.in/2011/11/tweaking-stack-size-of-linux-processes.html

스택과 같은 힙 할당자가 유용 할 수있는 영역 : 게임 엔진은이 기술을 사용합니다. 좋은 예로는 레벨을로드하고 언로드하는 동안 에셋 (텍스처, 쉐이더, 3D 메시 등)로드 및 언로드 이 있습니다. 할당 자와 같은 스택은 언로드 자산의 순서가 스택을로드하는 순서와 반대이므로 자연스러운 솔루션입니다.

A) 멀티 코어 시스템 : 당신은 또한 당신이 질문에서 언급 한 장점에 추가로 스택에 대한 더 많은 전문가 이러한 고려할 수 : 힙 https://github.com/davidaug/stackallocator

다른 문제 : 여기 구현을 볼 수 있습니다 : 스택 할당 자와 관련하여 또 다른 이점은 서로 다른 CPU 코어의 할당 요청이 힙 할당 자 설계를 해결하는 중요한 문제이므로 잠금 경합이 훨씬 적다는 점입니다. 경합을 잠그는 것 외에도 허위 공유와 같은 문제도 처리해야합니다. 이것에 관해서는 http://www.drdobbs.com/parallel/understanding-and-avoiding-memory-issues/212400410

b) 단편 : 내가 언급 한 첫 번째 항목 (할당 순서 독립 해제)은 필수 항목입니다. 그러나 이것은 또한 단편화의 문제를 야기합니다. What is memory fragmentation?

관련 문제