[Game Engine Architecture] 2부 로우레벨 엔진 시스템 - 메모리 관리(1)

2014. 11. 21. 04:13책/책 공부

  • 동적 메모리 할당 ( malloc(), new 연산자 ) 는 매우 느리다

->동적 메모리 할당을 피하거나 할당 비용을 크게 줄일 수 있는 메모리 할당자(allocator)를 직접 만들어야한다

  • 같은 데이터라도 작고 연속적인 메모리 블록에 들어있는 경우가 넓은 메모리 주소에 분산되 있는 경우보다 훨씬 빠르다

위 관점으로 코드의 메모리 활용 최적화를 해보자면,

동적메모리 할당(heap allocation) (ex. malloc(), free(), c++의 전역 new 연산자, delete 연산자) 은 보통 엄청 느리다.

두 가지 이유
  1. heap allocation 은 범용 목적이기 때문에, 1바이트에서부터 수 기가바이트까지 어떤 크기의 할당이라도 처리할 수 있어야한다
    이를 관리하는데 부가적인 비용이 필요함
  2. malloc() free()  호출 시, 대부분의 운영체제가 유저 모드에서 커널모드로 centext-switch 을 하고, 작업을 수행한 후에 다시 
    context-switch 을 한다.
    (centext-swtich 는 시스템 프로그래밍 참고, 고비용 작업)



힙 할당은 최소화 하고 tight loop (ex. for 문 등) 안에서는 절대 힙 할당을 하지 말 것


따라서 커스텀 메모리 할당자가 필요하다,

커스텀 메모리 할당자가 운영체제의 합 할당자보다 성능이 뛰어난 이유

  1. 미리 할당된 메모리 블록을 이용할 수 있다. 이 경우 커널 모드로 context-switch 전환하지않고 유저모드에서만 동작한다
  2. 사용 패턴 예측 가능하다


' > 책 공부' 카테고리의 다른 글

MoreEffectiveC++_Chapter01  (0) 2016.06.06