DOOM chạy 2,5 năm không tắt — rồi crash vì lỗi “gametic overflow” trên PDA

Tác giả ngocbao 18/09/2025 4 phút đọc

DOOM chạy 2,5 năm không tắt — rồi crash vì lỗi “gametic overflow” trên PDA

The title screen of the classic video game DOOM.

Hiện tượng và bối cảnh

Một người dùng để phiên bản DOOM chạy liên tục trên thiết bị PDA ASUS MyPal A620 trong khoảng 2,5 năm, với hệ điều hành Windows Mobile 2003, sử dụng một nguồn UPS tự làm để cấp điện ổn định. Sau thời gian dài đó, trò chơi đột ngột bị crash.

Nguyên nhân lỗi: giá trị “gametic” vượt ngưỡng

  • Trong DOOM, có một biến được gọi là gametic, dùng để đếm tick thời gian (tick = lần cập nhật đơn vị thời gian khi trò chơi chạy). Gametic được tăng liên tục với tốc độ khoảng 35 ticks / giây.

  • Biến gametic không được reset khi bắt đầu lại các bản demo hoặc ứng dụng tương tự, nên sau một thời gian dài, giá trị này cứ tăng mãi. Vì biến này được lưu trong số nguyên có dấu 32-bit (“signed 32-bit integer”), nên nó có giá trị cực đại là 2,147,483,647. Khi vượt qua giá trị đó, xảy ra hiện tượng tràn số nguyên (integer overflow), biến trở về giá trị âm, gây lỗi và làm trò chơi crash.

Thời gian để lỗi xuất hiện

  • Với tốc độ 35 ticks/giây, sẽ mất khoảng 1,95 năm để giá trị gametic đạt đến 2,147,483,647 ticks.

  • Trong trường hợp trò chơi hoặc bản port có tốc độ tick thấp hơn (ví dụ 30 Hz), thời gian có thể lâu hơn, khoảng 2,26 năm.

  • Trong thực tế, người dùng để trò chơi chạy khoảng 2,5 năm thì lỗi xuất hiện – phù hợp với dự đoán khi dùng thiết lập có tick rate thấp hơn hoặc có thời gian thiết bị “nghỉ” vài lúc.

Ý nghĩa & bài học rút ra

  • Lỗi tràn số nguyên (integer overflow) là một vấn đề lâu nay trong lập trình — nếu biến đếm không được thiết kế để xử lý khi đạt ngưỡng cực đại, thì khi sử dụng liên tục, lỗi kiểu này có thể xảy ra.

  • Trong các ứng dụng (như trò chơi, phần mềm server) nếu yêu cầu hoạt động lâu dài liên tục, nhà phát triển cần đảm bảo biến đếm được reset hoặc sử dụng kiểu dữ liệu có độ lớn hơn (ví dụ 64-bit) để tránh overflow.

  • Mặc dù lỗi này có vẻ “khó xảy ra” trong hầu hết trường hợp sử dụng thông thường, nó vẫn là minh chứng cho việc dù thiết bị cũ, phần mềm cũ, nếu để chạy thời gian dài, lỗi hiệu suất hay crash có thể xuất hiện không ngờ trước.

Tác giả ngocbao Admin
Bài viết trước iPhone Tốt Nhất 2025: Hướng dẫn chi tiết cách chọn iPhone phù hợp nhu cầu

iPhone Tốt Nhất 2025: Hướng dẫn chi tiết cách chọn iPhone phù hợp nhu cầu

Bài viết tiếp theo

400: Đánh giá chi tiết, từ màn hình tới camera 200MP

400: Đánh giá chi tiết, từ màn hình tới camera 200MP
Viết bình luận
Thêm bình luận

Bài viết liên quan

Thông báo

0917111899