什么是可映射和不可映射的模因
What is Mappable and Non-mappable Memeory
我正在跟踪一些示例代码,我遇到了一个函数(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 端口(,并不意味着您的用户空间程序可以直接访问它。
- "自动"隐式映射到什么?
- 在 C++ 中,映射相对于堆的优势是什么?
- 什么是最快的解决方案,用于读/写入哈希映射
- 在 c++ 中,跨向量的函子映射等效于什么
- 如果您用新版本覆盖共享库(当前由程序映射)会发生什么
- 检查是否存在多维映射的元素的最快方法是什么
- 这些会做什么(映射[x] [y] = 2;,map [x] [y] = 3;,以及map [x] [y] = 4;在下面
- 使用静态映射在C++中缓存数据的推荐方法是什么
- 在插入时同时迭代一个映射,这在什么方面是不安全的
- 修改映射中包含的类的正确方法是什么
- 通常用于将输入映射到显示器的数据结构是什么
- 在类映射中,当我们有迭代器时,constiterator的必要性是什么
- 在没有c++11的情况下,擦除映射中最后插入的元素的正确方法是什么
- BOOST中的属性映射是什么
- 我的 lambda 表达式进行映射键比较有什么问题?
- 我什么时候应该首选写入组合 CUDA 分配的映射主机内存
- 什么是 C++ 中的映射函数
- 对于空映射,map::begin() 的返回值是什么?
- unordered_map:如果键不在映射中,要返回什么
- 将迭代器取消引用到映射或 C++ 中的某些其他复合类型的类型是什么