我已经开始和Glew和Freeglut一起练习Glew了。
我有一个关于我的申请的问题,我想知道是否有人遇到了同样的问题(如果是)?
当我最初执行应用程序时,所使用的内存大约为22,000 KB。在最小化窗口并使其最大化之后,它只需要2900-3300 KB的内存,即使在窗口最小化和最大化之后也会继续这样做,并且在窗口有焦点的时候执行鼠标和键盘输入。
我想知道为什么会这样?我对FreeGlut不太了解,我想知道在使用FreeGlut最小化/最大化窗口时,是否有人注意到了这种行为。或者这可能是OS-specific的事?
很抱歉之前没有提到它,但是我使用的是Windows SP3,我正在用下面的代码行设置OpenGL上下文:
glutInit(&argc, argv);
glutInitContextVersion(3, 3);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(30, 30);
glutInitWindowSize(1000, 562);
glutCreateWindow("Testing");
glewExperimental = GL_TRUE;
glewInit();发布于 2013-08-30 13:09:55
这在很大程度上依赖于操作系统,也取决于您如何度量内存使用情况,但我可以让您了解一下为什么在Microsoft上会发生这种情况。Microsoft对使用基于WDDM驱动程序的应用程序中的用户模式内存使用情况有如下说明:
现有的游戏和其他图形应用程序经常为应用程序使用的视频内存资源的副本分配虚拟内存。如果视频内存内容丢失,应用程序将使用此副本快速恢复显示。例如,如果用户按下ALT+TAB或用户将计算机置于备用状态,应用程序将使用此副本。通常,当应用程序创建托管资源时,DirectX运行时代表应用程序管理副本。但是,应用程序也可以管理副本本身。拷贝使用的虚拟内存与应用程序分配的视频内存资源成正比。
现在,虽然微软描述这是一个DirectX问题,但它实际上也适用于OpenGL。在幕后,OpenGL通常完全透明地处理“设备丢失”事件(这不是OpenGL本身的一部分,而是窗口系统的一部分-- WGL )。尽管您可以使用健壮性扩展之一在OpenGL 4.x中的软件中实际接收这些事件,但您通常希望假装它们不存在。无论如何,我怀疑这才是罪魁祸首。
您的内存消耗将因您如何度量应用程序的内存消耗而大不相同,无论是只计算分配的虚拟内存页数(虚拟大小)还是实际驻留页(工作/驻留集)。在Windows上,如果您查看任务管理器的内存消耗情况,这通常是一种工作集的度量。工作集是一个非常模糊的概念,通常指的是“最近”引用的页面数;它可以增长/缩小,这取决于它何时取样,而不管在该时刻实际驻留了多少内存。我会把这归因于正常的司机行为,并意识到这种记忆可能不会对任何事情产生严重影响。
如果您在现代桌面64位平台(x86-64)上运行,您实际上有一个48位硬件地址空间(256个TiB),并且操作系统将为单个用户模式进程提供一小部分(在Windows上为8 TiB ),因此22,000 KiB是完全不重要的(如果您实际上将软件编译为64位)。
https://stackoverflow.com/questions/18528968
复制相似问题