TGViewer
Иван Черняков. Сразу к делу. Иван Черняков. Сразу к делу. @kosmostars7403 · 2.41K subscribers
Post #397 1.18K
Вас приветстует игровой канал Иван Чернякова!

На самом деле просто курьезов в игрострое опубличено больше, вот и рассказываю.

Оплошали даже Rockstar’ы.

В GTA Online много лет была загрузка, которая на некоторых ПК занимала около шести минут. В 2021 году программист под ником t0st решил выяснить, что игра вообще делает всё это время.

Оказалось — буквально мучает процессор двумя очень красивыми алгоритмическими ошибками. (meh.)

При запуске GTA Online читала JSON примерно на 10 МБ — каталог из ~63 000 игровых предметов. И парсер постоянно вызывал strlen() для оставшегося куска строки.

strlen() в C не знает длину строки заранее: он идёт по символам до \0. То есть вместо того, чтобы один раз узнать длину, игра снова и снова пробегала огромный кусок JSON.

Но дальше было ещё веселее.

Для каждого из 63 тысяч элементов игра проверяла, нет ли его уже среди загруженных. Причём не через hash set, где поиск в среднем O(1), а обычным проходом по всему массиву.

Получалось примерно:

1 + 2 + 3 + … + 63 000 ≈ 2 миллиарда сравнений.

Это классическое O(n²): если данных станет в 10 раз больше, работы станет примерно в 100 раз больше.

Самое прекрасное — все элементы в исходном JSON и так были уникальными. То есть эти два миллиарда проверок вообще не были нужны. (meh.)

t0st пропатчил бинарник без исходников: закешировал длину строки и убрал бессмысленный поиск дублей.

6:00 → 1:50. Минус 69,4% времени загрузки.

Rockstar проверила его находку, внесла исправления в GTA Online и выплатила ему $10 000 через bug bounty. (АрсТехника)

Прекрасное напоминание: иногда проблема производительности игры стоимостью миллиарды долларов — не GPU, не сеть и не диск.

А цикл не той сложности.

А они хотят, чтобы мы железо постоянно обновляли!!!!

Агенты, спасите!

В посте указаны ссылки на оригинальный пост пользователя t0st об этой проблеме, но вот еще на всякий случай ее перевод на Хабре)
  • 🔥 19
  • ❤ 5
  • 👍 3
More from @kosmostars7403
  1. Sep 14, 20261С. С - спаситель. Пост ждал своего часа, а в выходные тема сама прорвалась в чате. Так чт…
  2. Sep 10, 2026Когда человеку нечего, но очень хочется написать о какой-то теме, он начинает свой пост со…
  3. Sep 10, 2026ИНФЕРЕНС НА МОЗГЕ НАСЕКОМОГО Почвенная нематода Caenorhabditis elegans (ценорха́бдитис э́л…
  4. Sep 9, 2026Привет, у меня сегодня день рождения. Вы сделали огромные подарок: на канале сегодня-завтр…
  5. Sep 6, 2026Женя снова удивляет!
  6. Sep 6, 202699 бутылок: ПРОЛ-2 Иван Черняков, которого я консультировал в процессе создания фильма о п…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →