假设我的游戏在openGL方面有很多图形,我有一个安装了Linux 32位的桌面,配有4GB内存和1G Nvidia显卡。我的游戏应用程序虚拟地址空间如何?显卡内存是否映射到此虚拟地址空间?
另外,RAM和显卡内存之间是否存在某种关系? linux是否为显卡分配了相同的RAM,任何进程都无法使用?那就是说,它导致我的游戏过程只有3GB的RAM?
答案 0 :(得分:6)
我的游戏应用程序虚拟地址空间如何?
无法分辨。 OpenGL将这个细节完全公开给供应商实现。允许满足规范的任何内容。
显卡内存是否映射到此虚拟地址空间?
也许,也许不是。这取决于实际的实施。
另外,RAM和显卡内存之间是否存在某种关系?
通常是的。到目前为止,大多数OpenGL实现都关注图形卡的RAM本质上是实际存在于系统内存中的缓存(CPU RAM +交换空间+从存储映射的内存)。但是,这并不是规范,任何满足OpenGL规范的内容都是允许的。
Linux是否为显卡分配了相同的RAM,而任何进程都无法使用它?
不,因为Linux(内核)并不关心这些事情。不过,你的显卡驱动程序是。驾驶员可以按照自己认为合适的方式进行操作。它可以通过物理地址扩展(PAE)将OpenGL上下文数据映射到单独的地址空间,也可以将其放在不同的进程中,或者将其保存在游戏的地址空间中,或者......,或......,或......。这方面没有减记的计划。
那就是说,结果我的游戏过程只有3GB的RAM可用吗?
如果是这样,那么更像是(3GB - 1GB) - x
0 < x
,因为您的流程的最高1GB&#39;地址空间是为内核保留的,当然你的程序文本(由CPU执行的二进制文件)和它使用的库文本也需要一些地址空间。