Làm sao để biết bộ nhớ không được xử lý đúng không?


12

Dấu chân bộ nhớ của trò chơi (2D) của tôi dường như tăng lên bất cứ khi nào tôi tải kết cấu, ví dụ: khi tôi bắt đầu trò chơi, nó sử dụng RAM riêng 30 mb, sau khi chuyển đổi tệp nền ~ 367mb, do đó, tất cả đều ở RAM RAM riêng 54 mb.

Điều tương tự xảy ra sau khi đi cùng một khoảng cách nhưng lặp đi lặp lại giữa hai điểm liên tục.

Tuy nhiên, các bài đọc của tôi đang cho thấy rằng chương trình đang gọi chính xác glDeleteTextures khoảng một giây sau khi kết cấu tắt màn hình; và valgrind không tìm thấy bất kỳ rò rỉ.

Làm thế nào để tôi biết nếu tôi nên lo lắng về điều này, hoặc nếu nó chỉ là một sự giải thích về cách bộ nhớ các trang hệ điều hành?


1
Làm thế nào bạn xác định mức sử dụng RAM của ứng dụng của bạn? Bạn đang sử dụng một trình lược tả (cái nào?) Hay bạn chỉ tin tưởng trình quản lý tác vụ của hệ điều hành của bạn (cái nào)?
Philipp

1
Trình quản lý tác vụ trên kUbfox, trình lược tả trên trình gỡ lỗi của tôi cho tôi biết rằng nó đang chờ dữ liệu rồi không bao giờ hiển thị bất cứ thứ gì.
Patrick Jeeves

1
Nhân tiện: Khi bạn kiểm tra mức tiêu thụ bộ nhớ trên Linux, hãy nhớ không chỉ nhìn vào bộ nhớ được tiêu thụ bởi quá trình trò chơi. Một lần tôi làm việc trên một trò chơi đa nền tảng, chúng tôi đã tự hỏi tại sao phiên bản Windows tiêu thụ nhiều ram hơn phiên bản Linux, cho đến khi chúng tôi nhận thấy rằng phiên bản Linux của API đồ họa của chúng tôi rõ ràng đã phân bổ bộ nhớ cho tất cả các kết cấu trong quy trình X11.
Philipp

2
Bạn không nên mong đợi rằng glDeleteTextures sẽ thực sự giải phóng bộ nhớ: gamedev.stackexchange.com/questions/136883/
Kẻ

Câu trả lời:


21

Bộ nhớ ảo được phân bổ từ HĐH theo khối lớn, khi thậm chí một byte vẫn còn được sử dụng trong khối lớn đó, nó không thể được giải phóng trở lại HĐH.

Các thư viện phân bổ trong không gian người dùng cũng giữ một lượng nhất định để sử dụng lại để tránh yêu cầu và giải phóng bộ nhớ liên tục từ / đến HĐH cực kỳ chậm.

Ví dụ: bạn phân bổ một kết cấu, trình điều khiển OpenGL dành một bảng gồm 32 khe kết cấu, bạn tiếp tục phân bổ kết cấu, trình điều khiển sau đó cần phân bổ một bảng lớn hơn gồm 1024 khe kết cấu mà bảng mới này hiện đang chiếm không gian trong khối RAM lớn, bạn miễn phí tất cả các kết cấu, trình điều khiển không thu hẹp cũng như không phân bổ lại bảng đó với hy vọng rằng trò chơi / ứng dụng của bạn sẽ cần sử dụng nhiều kết cấu sau đó để có thể giải phóng RAM lớn cho HĐH.

Điều này là hoàn toàn bình thường và muốn. RAM không sử dụng cuối cùng sẽ được sử dụng lại bởi ứng dụng của bạn.


1
Đáng lưu ý rằng nếu việc sử dụng tiếp tục tăng trong khi chơi, nhưng các máy dò rò rỉ vẫn không tìm thấy gì, bạn có thể bị phân mảnh bộ nhớ quá mức. Các cách tiếp cận để giải quyết vấn đề như vậy được mô tả tại stackoverflow.com/questions/150753/ cũng sẽ hữu ích cho việc phát triển trò chơi.
Jules
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.