什么时候可以安全地释放我传递给 DirectX 的内存
When is it safe to release memory I pass to DirectX?
DirectX API中的许多函数将数组作为指针和长度(例如 RSSetViewports
(。我看不到任何关于指针需要存活多长时间的文档 - 直到函数返回还是我需要让该数组保持活动状态?
更一般地说,DirectX API 是否有生命周期约定,它是否记录在某处?
在 DirectX 11 中,只有在调用中才需要指向结构的指针。资源数据将复制到 DirectX COM 对象中,引用计数管理对象生存期。内存由驱动程序或运行时分配,是 GPU 视频内存、PCIe 孔径内存和系统内存的混合,具体取决于资源类型。内存在虚拟内存空间中的映射方式还有一些额外的复杂性,但通常,除了保持 COM 对象处于活动状态之外,您不必担心它。
XAudio2 要求您将音频缓冲区保持活动状态,直到它们不再使用,其中较旧的 DirectSound API 复制音频数据,这对于 XAudio2 使用的基于 CPU 的所有混合模型的效率较低。
对于 DirectX 12,这取决于您所说的内存类型,因为更多的内存生存期由应用程序显式管理,您必须自己管理 GPU/CPU 同步。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- Directx 12 :在两个进程之间共享图形内存
- 什么时候可以安全地释放我传递给 DirectX 的内存
- 在这种情况下,DirectX COM 对象会出现内存泄漏
- C++DirectX无法读取内存
- DirectX 9到11 OpenSharedResource正在疯狂地泄漏内存.我做错什么了吗?
- C++DirectX 11内存管理与发布ShaderResourceView有关