Pooling?

발생

게임 관련해서 정보를 알아보다가 알게된 용어이다.

정의

Pooling

Pooling = 메모리 풀 기법

C/CPP 기준 동적으로 malloc/new를 매번 호출하면 할당/해제 비용이 크고, 메모리 단편화(fragmentation)도 생긴다. 게임 엔진은 수천~수만 개 객체(총알, 이펙트, 몬스터 등)를 자주 만들고 없애야 하므로 미리 큰 메모리 덩어리(풀)를 할당해 두고 재사용하는게 효율적이다.

// 단순한 풀링 예시
Bullet* pool[10000];
int freeList[10000];
int freeCount;

Bullet* allocBullet() {
    return pool[freeList[--freeCount]]; // 미리 준비된 슬롯 반환
}

void freeBullet(Bullet* b) {
    freeList[freeCount++] = indexOf(b);
}

동적으로 메모리를 할당/해제하는 오버헤드가 줄어들고 메모리가 연속적으로 배치되어있어서 순차적으로 접근이 빨라진다. 이로인해 캐시 친화적이게 된다. 하지만 구현 복잡도가 높아지고 풀 크기를 잘못 잡으면 메모리 낭비가 발생한다.

JS에서는…

말도마라 순수 js만으로는 애초에 저수준 메모리 할당이 불가능하다…

Day-4


tech