재귀 호출 세계 기록, 스택 메모리 최적화로 달성!
발표자는 재귀 호출(Recursion)을 통해 세계 기록을 세우기 위한 여정을 설명하며, 17조 번 이상의 재귀 호출을 달성했음을 강조함.
파이썬(Python), C 언어(C) 등 다양한 언어에서 재귀 호출의 한계를 실험하고, 스택 메모리(Stack Memory) 사용량에 대한 분석을 제시함.
파일 시스템(File System)을 활용하여 스택 메모리를 확장하고, 커널(Kernel) 레벨에서의 최적화 시도를 설명함.
32비트(32-bit)와 64비트(64-bit) 모드를 전환하여 재귀 호출 횟수를 늘리는 기술을 소개하고, 최종적으로 세계 기록을 달성했음을 보고함.
재귀 호출의 기본 원리 및 한계
발표자는 재귀 호출의 기본 원리를 설명하며, 파이썬(Python)을 예시로 들어 재귀 호출의 한계를 보여준다. 함수 호출(Function Call) 시 스택 메모리에 저장되는 정보(매개변수, 반환 주소, 지역 변수)로 인해 메모리 부족 오류가 발생하며, 재귀 호출 횟수 제한(Recursion Limit)이 존재함을 강조한다. 또한, C 언어(C)를 사용하여 스택 메모리 사용의 효율성을 비교 분석한다.
스택 메모리 최적화를 위한 다양한 시도
발표자는 Ulimit 명령어를 사용하여 스택 메모리(Stack Memory) 크기를 늘리는 방법을 소개하고, Tail Call Optimization을 통해 재귀 호출을 최적화하는 방법을 설명한다. 또한, 파일 시스템(File System)을 활용하여 스택 메모리를 확장하는 방법을 제시하며, Mmap 시스템 콜을 통해 파일 기반 스택을 구현하는 과정을 설명한다. 발표자는 32비트(32-bit)와 64비트(64-bit) 모드를 전환하여 재귀 호출 횟수를 늘리는 기술을 소개한다.
커널(Kernel) 레벨에서의 최적화 및 문제점
발표자는 커널(Kernel) 레벨에서의 최적화를 시도하며, Madvise 시스템 콜을 사용하여 페이지 테이블을 수동으로 정리하는 방법을 설명한다. 발표자는 Mmap 시스템 콜을 사용하여 파일 기반 스택을 구현하는 과정에서 발생할 수 있는 문제점을 지적하고, 페이지 테이블(Page Table)의 메모리 사용량 증가 문제를 언급한다. 또한, 32비트(32-bit)와 64비트(64-bit) 모드를 전환하는 과정에서 발생한 문제점을 설명하고, 최종적으로 세계 기록을 달성했음을 보고한다.
재귀 호출 세계 기록 달성 과정
발표자는 어셈블리 코드(Assembly Code)를 사용하여 재귀 호출을 구현하고, 링커 스크립트(Linker Script)를 통해 코드의 위치를 제어하는 방법을 설명한다. 발표자는 하드웨어 인터럽트(Hardware Interrupt)를 사용하지 않고, 32비트(32-bit)와 64비트(64-bit) 모드를 전환하는 기술을 활용하여 재귀 호출 횟수를 늘린다. 발표자는 최종적으로 17조 5920억 7220만 9515310번의 재귀 호출을 성공적으로 수행하여 세계 기록을 달성했음을 보고한다.