c++ - 创建多个顶点和索引缓冲区时会消耗大量内存

标签 c++ windows graphics direct3d

我遇到了一个很奇怪的问题。当我在 D3D 中创建一些非常简单的 VertexBuffer 和 IndexBuffer 时,TaskManager 报告的内存消耗很大。

我通过 D3D CreateIndexBuffer 方法创建了 60000 个索引缓冲区。每个索引缓冲区包含 6 个索引(int),代表两个三角形。因此,一个索引缓冲区将占用 24 个字节。总内存消耗为 24*60000 = 1,440,000。但是任务管理器显示应用程序内存增加了 300MB!

我不知道 D3D9 是如何在内部进行内存分配的,但这个问题也发生在 D3D10 中。这是因为内存碎片吗?

这是x86|bebug下的版本,d3d是release版本,windows 7。

最佳答案

60000 个索引缓冲区?为什么不只创建 1 个大索引缓冲区?切换所有这些索引缓冲区本身会很慢。

关于原因:您创建的每个索引缓冲区都会有开销(各种跟踪信息和驱动程序将用来优化它的信息位)并且 5K 内存对我来说似乎很合理. 5K * 60000 大约是 300 兆...

关于c++ - 创建多个顶点和索引缓冲区时会消耗大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667879/

相关文章:

c++ - 如何定义一个只能通过 new 实例化(即不在堆栈上)的类?

c++ - 将元素插入排序数组并找到其索引的最有效方法

c++ - 声明 SID Windows c++

c++ - 找不到 Qwindows.dll

c++ - 如何轻松地将函数应用于 C++ 中的集合

c++ - 在 Qt Creator 中加载具有相对路径的文件

Android SDK 64 位(独立而不是 ADT bundle )是否存在?

graphics - "soup"(定义)在 "triangle soup"或 "polygon soup"中意味着什么?

ios:我需要填充 UIImage 的一半

c++ - 如何在 Raylib 中用像素追踪路径?