2010-05-05 3 views
3

자주 할당되거나 할당되지 않은 작은 덩어리의 경우 Windows의 개인 힙을 만드는 데 약간의 이점이 있습니다. 하지만 일반적인 접근 방법은 기본 힙에서 많은 양의 메모리를 할당하고 할당과 할당 해제를 스스로 관리하는 것입니다. 제 질문은이 두 가지 방법의 장점과 단점이 어떤면이 있습니까? 큰 청크 할당개인 힙 또는 메모리 자체 관리

감사 최대

+0

어떤 언어를 사용하고 있습니까? –

+0

Visual C++입니다. – LJJ

+0

좋은 답변 외에도 다른 답변보다 나은 답변이 필요한 것은 아닙니다. 또한 두 가지를 혼합하여 큰 블록을 미리 할당하고 하위 할당 및 할당 해제를 관리 할 수있는 개인 힙을 만들 수 있습니다. –

답변

3

일부 장점 :

  • 당신은 당신의 자신의 할당 요구에 매우 특별히 최적화하고 성능을 향상시킬 수 있습니다.
  • 동시성 규칙을 알고있는 경우 동기화 개체를 사용하지 않아도됩니다.
  • 단일 무료 사용은 전체 할당 집합을 릴리스 할 수 있습니다. 예를 들어, 한 번에 모두 해제되는 작은 할당을 필요로하는 짧은 수명 프로세스는 더 큰 블록에서 벗어나 단일 호출로 해제 할 수 있습니다.

그러나 단점은 매우 큽니다. 추가 된 복잡성으로 인해 버그가 더 많이 발생하고 유지 관리가 어려워지고 결국 성능이 저하 될 수 있습니다. 이 문제를 지원할 데이터가 전혀 없지만 자체 개발 된 힙 관리 시스템이 도움이되는 것보다 성능이 떨어지는 것으로 의심됩니다. 시스템의 할당 (예를 들어,를 HeapAlloc)를 사용

일부 장점 :

  • 덜 복잡.
  • 할당/해제에서 동시성 문제의 위험이 줄어 듭니다.
  • Low-Fragmentation Heap을 활용할 수있는 기능. 이것은 작은 할당을 매우 효율적으로 처리하는 대부분의 경우에 이미 아주 잘 수행됩니다.
+0

많은 감사, 마크. – LJJ

2

일반적으로 할당과 할당 해제의 오버 헤드가 감소되고 (메모리 연속 될 가능성 같이) 지방 증가 풀 할당 자에 행해진 다. More information on pool allocators

많은 경우 분열은 최악의 적입니다. 할당 할 때 객체 크기를 일관되게 유지하거나 크기를 유지하십시오 (2의 거듭 제곱이 인기가 있지만 너무 낭비 일 수 있음). 이렇게하면 할당되는 메모리의 크기가 거의 없으므로 조각화가 줄어 듭니다. 자신의 힙을 관리

+0

답장을 보내 주셔서 감사합니다. 내 질문에 하나 더 나은 것입니다, 메모리 풀 또는 개인 힙을 사용하여 생각하십니까? – LJJ

+0

@Max : 정답은 없습니다. 그것은 모두 응용 프로그램과 사용 패턴에 따라 다릅니다. –