什么是可映射和不可映射的模因

What is Mappable and Non-mappable Memeory

本文关键字:映射 什么      更新时间:2023-10-16

我正在跟踪一些示例代码,我遇到了一个函数(ID3D11DeviceContext::UpdateSubresource(,通过该函数"CPU将数据从内存复制到在不可映射内存中创建的子资源。

从物理和/或逻辑上讲,可映射内存的简化定义是什么?

同样,不可映射内存的简化定义是什么?

我找到了很多关于记忆图主题的详细(从初学者的角度来看(信息,我已将其添加到我的阅读列表中。我已经阅读了一些基本信息,解释了内存映射是什么以及为什么。正如一个网站所说,"计算机内存上文件的排列保存在称为内存映射的虚拟文件中。

我无法将这些定义和概念连接到术语可映射/不可映射内存。

我在朋友的帮助下过得去。

可映射内存是您可以通过虚拟内存映射直接从程序访问的内存。

如果您的显卡的内存不是内存映射的,您需要以某种方式向卡发出命令,以将其从地址空间加载到其地址空间。这涉及复制。

如果卡的内存是共享或映射的,CPU 可以直接写入共享内存,从而避免不必要的复制。

对于图形,基本上有四种内存:

  • 专用视频内存:这是只能由图形卡使用的内存,因为它物理上位于图形部件本身上。GPU 可以访问它,CPU 不能。DXGI_ADAPTER_DESC.DedicatedVideoMemory值是这种内存的数量。

  • 专用系统内存
  • :对于集成图形部分,在启动时占用一部分主系统内存用于专用图形。CPU 被阻止访问它,并且仅由 GPU 使用。 DXGI_ADAPTER_DESC.DedicatedSystemMemory是这种内存的数量。

  • 共享系统内存:这是普通主内存,放置在GPU和CPU都可以访问的模式下。通常,这是通过 PCIe 内存孔径之类的方式实现的。 DXGI_ADAPTER_DESC.SharedSystemMemory是这种内存的数量。

  • GPU 无法访问系统内存的其余部分,只能由 CPU 访问。GPU 通常不能在所有三种类型之间寻址超过 4 GB 的总内存。

因此,对于独立显卡部分,DedicatedVideoMemory 大约是 1 GB,SharedSystemMemory大约是 256 MB 或更大,DedicatedSystemMemory是 0。

对于集成部分,DedicatedVideoMemory是一些小数字(16 MB 或 32 MB(甚至 0,DedicatedSystemMemory是 256 MB 或 512 MB,SharedSystemMemory是 256 MB 或更大。

还有"统一内存架构"系统,例如Xbox One,其中有少量DedicatedVideoMemory,基本上所有主内存也SharedSystemMemory

"可映射"内存是指共享系统内存。如果关联的资源DEFAULT则无法映射它,因为它被允许驻留在专用视频内存中。DYNAMIC资源被放入共享系统内存中。STAGING资源在"系统内存的其余部分"部分中分配。

请参阅 DirectX 视频内存示例。

内存映射是一个术语,指的是为某物分配内存地址。 该内容可以是USB接口的硬件寄存器或文件中的位置。

内存

映射文件是一个可以像在内存中一样访问的文件,就像一个巨大的数组一样。 某些操作系统为此提供了功能,在其他平台上,程序员必须对此行为进行建模。

请注意,RTOS 通常控制对内存位置的访问,包括内存映射的位置。 仅仅因为某些内容是内存映射的(如 I2C 端口(,并不意味着您的用户空间程序可以直接访问它。