假设我有一个游戏,在openGL方面做很多图形,我有一个带有Linux32位的桌面,安装了4GB的内存和1G的Nvidia图形卡。我的游戏应用虚拟地址空间是什么样子的?显卡内存是否映射在这个虚拟地址空间中?
另外,RAM和显卡内存之间是否有某种关系?linux是否为任何进程不能使用的显卡分配相同的RAM?也就是说,它的结果只有3GB的内存,可用于我的游戏过程?
发布于 2016-01-22 12:16:19
我的游戏应用虚拟地址空间是什么样子的?
不可能知道。OpenGL将此细节完全开放给供应商实现。任何符合规格的东西都是允许的。
显卡内存是否映射在这个虚拟地址空间中?
可能会,也可能不会。这取决于实际的实现。
另外,RAM和显卡内存之间是否有某种关系?
通常是的。就大多数OpenGL实现而言,显卡的RAM本质上是系统内存中实际存在的东西的缓存(CPU RAM +交换空间+存储映射的内存)。但是,这并不局限于规范,任何符合OpenGL规范的内容都是允许的。
Linux是否为任何进程不能使用的显卡分配相同的RAM?
不,因为Linux (内核)不关心这些事情。不过,你的显卡驱动程序是。司机可以随心所欲地这样做。它可以通过物理地址扩展将OpenGL上下文数据映射到单独的地址空间,或者将其放置在不同的进程中,或者将其保存在游戏的地址空间中,或者将其保存在…中。,或…,或…。这上面没有写下来的计划。
也就是说,它的结果只有3GB的内存,可用于我的游戏过程?
如果是这样,那么更像(3GB - 1GB) - x,因为进程地址空间的前1GB是为内核保留的,当然,程序的文本(由CPU执行的二进制文件)和它使用的库的文本也需要一些地址空间。
https://stackoverflow.com/questions/34939514
复制相似问题