Jejak memori permainan (2D) saya tampaknya meningkat setiap kali saya memuat tekstur, misalnya ketika saya memulai permainan saya menggunakan RAM pribadi 30 mb, setelah mentransversikan file latar belakang ~ 367mb, jadi semuanya ada dalam RAM di beberapa titik, itu meningkat menjadi RAM RAM pribadi 54 mb.
Hal yang sama terjadi setelah pergi jarak yang sama tetapi bolak-balik antara dua titik berulang kali.
Namun, pembacaan saya menunjukkan bahwa program memanggil glDeleteTextures dengan benar sekitar satu detik setelah tekstur mati; dan valgrind tidak menemukan kebocoran.
Bagaimana saya tahu jika saya harus khawatir tentang ini, atau jika itu hanya kekhasan bagaimana memori halaman OS?
Jawaban:
Memori virtual dialokasikan dari OS dalam potongan-potongan besar, ketika bahkan satu byte dibiarkan masih digunakan dalam potongan besar itu tidak dapat dilepaskan kembali ke OS.
Alokasi pustaka di ruang pengguna juga menyimpan sejumlah tertentu untuk digunakan kembali untuk menghindari berulang kali menuntut dan melepaskan memori dari / ke OS yang sangat lambat.
Misalnya, Anda mengalokasikan tekstur, driver OpenGL menyimpan tabel 32 slot tekstur, Anda tetap mengalokasikan tekstur, driver kemudian perlu mengalokasikan tabel yang lebih besar dari 1024 slot tekstur. Tabel baru ini sekarang mengambil tempat di sebagian besar RAM, Anda membebaskan semua tekstur, driver tidak menyusut atau mengalokasikan ulang tabel itu dengan harapan bahwa permainan / aplikasi Anda akan perlu menggunakan banyak tekstur nanti sehingga sebagian besar RAM tidak dapat dilepaskan kembali ke OS.
Ini sangat normal dan diinginkan. RAM yang tidak digunakan akhirnya akan digunakan kembali oleh aplikasi Anda.
sumber