옛날 게임들이 최적화가 지리는 이유

옛날 게임들이 최적화가 지리는 이유

간략한 요약

이 비디오에서는 게임보이와 같은 구형 콘솔에서 프로그래밍할 때 개발자들이 직면했던 제약 사항과, 이러한 제약 사항을 극복하기 위해 사용했던 최적화 기술에 대해 설명합니다. 메모리 관리, 곱셈 및 나눗셈 연산 구현, 비트 연산을 통한 효율적인 상태 관리 등의 내용을 다룹니다.

  • 8KB 램의 한계 극복을 위한 메모리 최적화 기법
  • 곱셈/나눗셈 연산 부재 시 효율적인 연산 구현 방법
  • 비트 연산을 활용한 상태 관리 및 비교 연산 최적화

인트로

게임 실행에 필요한 램은 게임 데이터를 CPU가 처리할 수 있도록 저장하는 데 필수적입니다. 최신 게임은 많은 메모리를 사용하지만, 과거에는 메모리 용량이 매우 제한적이었습니다. 예를 들어, 포켓몬 레드 게임을 실행하던 게임보이는 CPU 성능이 낮고 램 용량이 8KB에 불과하여 개발자들이 고도의 최적화 기술을 사용해야 했습니다.

포켓몬 도감 최적화

포켓몬 도감 기능은 만난 포켓몬을 기록하고 카운팅하는 기능입니다. 1세대 포켓몬은 총 151마리인데, 각 포켓몬의 만남 여부를 기록하기 위해 일반적인 방법(True/False 형태)으로 저장하면 151바이트의 메모리가 필요합니다. 이는 게임보이 전체 메모리의 2%를 차지하므로 비효율적입니다. 따라서 개발자들은 1바이트를 8개의 비트로 쪼개어 각 비트에 포켓몬의 만남 여부를 저장하는 방식을 사용했습니다. 이렇게 하면 19바이트 정도로 기능 구현이 가능해져 메모리를 절약할 수 있습니다.

곱셈, 나눗셈 구현

최신 컴퓨터는 CPU 내에 곱셈 및 나눗셈 부품이 있지만, 과거 CPU에는 이러한 부품이 없어 코딩 시 곱셈 및 나눗셈 문법을 사용할 수 없었습니다. 따라서 곱셈을 구현하기 위해 덧셈을 여러 번 반복하는 방식을 사용했습니다. 하지만 큰 숫자를 곱할 때는 반복 횟수가 늘어나 성능 문제가 발생했습니다. 이를 해결하기 위해 개발자들은 이진수 변환과 비트 연산을 활용한 효율적인 곱셈법을 개발했습니다. 이 방법은 곱할 숫자가 커져도 반복 횟수가 고정되어 CPU 부담을 줄일 수 있었습니다. 2를 곱하는 연산은 비트를 왼쪽으로 한 칸 이동시키는 방식으로 처리하여 효율성을 높였습니다.

상태이상 관리

포켓몬의 상태 이상은 총 5가지가 있으며, 각 상태 이상 여부를 메모리에 저장해야 합니다. 메모리 절약을 위해 1바이트를 8개의 비트로 쪼개어 각 비트에 상태 이상 여부를 저장했습니다. 이렇게 하면 메모리 절약뿐만 아니라 비트 연산을 통해 상태 비교 연산을 빠르게 수행할 수 있습니다. 예를 들어, AND 연산자를 사용하여 포켓몬이 마비 또는 중독 상태인지 한 번의 연산으로 체크할 수 있습니다.

결론

과거에는 제한된 램과 CPU 성능으로 인해 개발자들이 메모리 관리와 연산 최적화에 많은 노력을 기울여야 했습니다. 하지만 현대에는 CPU 성능이 향상되고 메모리 용량이 충분해져 코드 최적화의 필요성이 줄어들었습니다.

Share

Summarize Anything ! Download Summ App

Download on the Apple Store
Get it on Google Play
© 2024 Summ