초기 유닉스(Unix) 시스템의 소스 코드를 분석한 결과, 오늘날의 아레나(arena) 할당 방식과 유사한 메모리 관리 기법들이 이미 존재했음이 밝혀졌습니다. 1973년 출시된 유닉스 V4 커널의 malloc()과 mfree() 함수는 자원 맵(resource map)을 인자로 받아 주기억장치와 디스크 스왑 공간을 동일한 코드로 관리했으며, 심지어 해제 시에도 크기를 명시해야 했습니다. 이는 현대의 메모리 관리 기법들이 단순히 새로운 것이 아니라, 과거의 아이디어들이 다양한 형태로 재발견되고 발전해왔음을 시사합니다.
유닉스 V4의 C 컴파일러는 선형 할당기(linear allocator)를 사용해 메모리를 할당하고, 필요 시 sbrk() 함수로 힙(heap)을 확장했습니다. 이 방식은 할당된 메모리를 프로그램 종료 시까지 개별 해제하지 않는다는 점에서 현대의 아레나와 유사합니다. 또한, V4의 malloc()과 mfree()는 주소 순서 블록 목록에서 최초 적합(first-fit) 탐색을 수행하고 인접한 빈 블록을 병합하는 알고리듬을 사용했습니다. 이후 V7과 V8에서는 타입 기반 할당 매크로가 등장하여 sizeof 계산을 추상화하려는 시도가 있었고, V8의 일부 매크로는 할당된 메모리를 0으로 초기화하는 기능까지 제공했습니다. C++의 new 연산자는 Simula에서 유래했으며, 할당과 초기화를 간편하게 결합하여 동적 할당의 사용을 크게 늘렸지만, 역설적으로 malloc()이 실행 시간의 50% 이상을 차지하는 성능 병목을 유발하기도 했습니다.
이처럼 다양한 메모리 관리 기법들이 시도되었음에도 불구하고, 명시적 영역(explicit arena) 방식이 주류가 되지 못한 이유는 명확하지 않습니다. 하지만 당시 프로그램의 단순한 객체 수명, 제한된 메모리 및 가상 메모리 부재, 그리고 수동 메모리 관리를 줄이려는 시도 등이 복합적으로 작용했을 것으로 추정됩니다. 흥미롭게도 V7에는 가비지 컬렉션(garbage collection) API인 galloc(), gfree(), garbage()가 추가되어 C 개발자들조차 자동 메모리 관리를 원했음을 보여줍니다. 이러한 초기 유닉스 시스템의 메모리 관리 역사는 현대 소프트웨어 개발에서 마주하는 메모리 관련 문제들이 얼마나 오래된 고민에서 비롯되었는지, 그리고 그 해결책들이 어떻게 진화해왔는지를 이해하는 데 중요한 통찰을 제공합니다.