메모리가 올바르게 처리되지 않는지 어떻게 알 수 있습니까? 같습니다. 54MB

(2D) 게임의 메모리 풋 프린트는 텍스처를로드 할 때마다 증가하는 것 같습니다. 54MB 전용 RAM.

같은 거리를 이동 한 후 두 점 사이를 반복해서 앞뒤로 이동 한 후에도 같은 일이 발생합니다.

그러나 내 판독 결과는 텍스처가 화면을 벗어난 후 약 1 초 정도 프로그램이 glDeleteTextures를 올바르게 호출하고 있음을 보여줍니다. valgrind는 누수를 찾지 않습니다.

이 문제에 대해 걱정해야하는지 또는 OS가 메모리를 페이지하는 방식에 문제가 있는지 어떻게 알 수 있습니까?



답변

가상 메모리는 큰 청크로 OS에서 할당되며, 심지어 큰 청크에서 바이트를 계속 사용하더라도 OS로 다시 해제 할 수 없습니다.

사용자 공간의 할당 라이브러리는 반복적으로 요구되는 메모리를 반복적으로 요구하고 OS에서 메모리를 릴리스하는 것을 피하기 위해 재사용을 위해 일정량을 유지합니다.

예를 들어 텍스처를 할당하고 OpenGL 드라이버는 32 개의 텍스처 슬롯 테이블을 예약하고 텍스처를 할당 한 다음 드라이버는 1024 개의 텍스처 슬롯 더 큰 테이블을 할당해야합니다.이 새로운 테이블은 이제 큰 RAM 덩어리에 공간을 차지합니다. 모든 텍스처를 해제하면 드라이버는 게임 / 응용 프로그램이 나중에 많은 텍스처를 사용해야하므로 큰 RAM 덩어리가 OS로 다시 릴리스 될 수 없을 것으로 예상하여 테이블을 축소하거나 다시 할당하지 않습니다.

이것은 완벽하게 정상이며 원합니다. 사용하지 않는 RAM은 결국 앱에서 재사용됩니다.