我正在使用 Nvidia 290.10 64 位驱动程序开发基于 linux 的 c++ OpenGL 应用程序。我正在尝试减少它的内存占用,因为它使用了大量的实时数据。
我一直在使用 valgrind/massif 来分析堆使用情况,虽然它帮助我优化了各种事情,但现在使用的最大堆内存块是由 libGL 分配的。无论我如何设置阈值,massif 都不会让我详细了解这些分配的来源,只是它是 libGL。在高峰期,我看到 libGL 分配了大约 250MB(总堆使用量为 900MB)。我在显卡上拥有与 VBO 和纹理(主要是一个大的 4096*4096 纹理)类似的内存量。
因此,libGL 在堆上分配的内存量似乎与我上传到 GPU 内存的内存量相似。当 VBO 的数量达到峰值时,libGL 分配也会达到峰值。这正常吗?我认为拥有大量 GPU 内存的好处之一是它可以保持 RAM 空闲?