我在Windows 10 x64上工作。 32位进程最多可以使用2GB内存。我已经测试过:一个仅分配25mb内存块的简单程序可以使用大约1950mb的内存。超过该大小后,malloc返回null。我使用GLFW库创建了一个简单的OpenGL应用程序。它只是显示一个空窗口-任务管理器显示内存使用量约为26 mb。我注意到当我在调用以下函数后尝试执行malloc测试时:
glfwSetErrorCallback(error_callback);
if (!glfwInit())
{
exit(EXIT_FAILURE);
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,1);
GLFWwindow* window = glfwCreateWindow(windowWidth,windowHeight,"LegacyGL",NULL,NULL);
if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwSetKeyCallback(window,key_callback);
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
当应用程序内存使用量约为 1600mb 时,malloc返回null。我尚未分析GLFW源代码,但怎么可能呢?在执行malloc测试之前,内存使用量约为24mb。任务管理器是否可能不显示该程序已使用的所有内存。
编辑:
减小malloc大小后,程序可以分配大约1800mb。看起来opengl驱动程序映射了程序的某些内存区域,但任务管理器未显示它。您是否知道任何工具可以检查驱动程序已映射多少内存?哪些OpenGL函数会增加此类映射的内存区域?