벨 연구소가 개발한 유닉스 4판의 원시 코드가 최근 복원되어 공개되면서, 1970년대 초중반의 시스템 프로그래밍 관행이 다시 주목받고 있다. 특히 이번 자료는 C 언어가 본격적으로 도입된 시점의 메모리 할당 로직을 구체적으로 보여준다.
해당 코드에는 malloc.c라는 파일이 포함되어 있지만, 이는 현대적인 의미의 동적 메모리 할당 라이브러리와는 거리가 멀다. 당시 C 컴파일러 도구체인 c20.c 내부에서는 단순한 선형 할당자가 사용되었다. 요청받은 크기를 짝수 단위로 반올림하여 연속된 블록을 배분하는 방식이었다.
메모리가 부족해지면 sbrk() 함수를 호출해 힙 영역을 확장했다. 이 과정에서 중요한 점은 해제 기능이 존재하지 않았다는 사실이다. 프로그램이 종료될 때까지 할당된 메모리는 계속 유지되는 구조였다.
따라서 별도의 free 연산이 필요 없었다.
이는 커널 내부의 malloc()과 mfree()와는 명확히 구분된다. 커널은 명시적인 자원 맵을 받아 첫 번째 적합성 검색으로 블록을 찾고, 인접한 빈 공간을 병합했다. 메인 메모리와 디스크 스왑 공간을 각각 다른 단위로 관리하며 유연성을 확보했다.
초기 diff 유틸리티에서도 유사한 선형 할당 패턴이 관찰된다. 처리 후 롤백처럼 메모리를 재사용하는 기법이 적용되었다. 이러한 접근법은 이후 C++의 new 연산자나 지역 기반 할당 개념으로 이어지는 역사적 맥락을 제공한다.
하지만 이러한 효율적인 방법들이 널리 채택되지 않은 이유는 여전히 논쟁거리다. 많은 프로그램이 직접 malloc()을 호출하며 반복적인 크기 계산과 오류 검사를 수행했다. 아레나나 지역 할당의 장점이 초기부터 존재했음에도 표준화되지 못한 셈이다.
이번에 공개된 유닉스 V4 테이프는 지난해 저장실 청소 중 발견된 것으로, 약 50여 년 전인 1973년 11월 릴리스 버전이다. 과거에는 완전히 소실된 것으로 여겨졌던 자료다. 현재까지의 분석은 주로 컴파일러 도구와 커널의 차이점에 집중되어 있다.
