想象一下:
当应用程序使用例如1.5 GB的内存,是否可以再分配1 GB的纹理?它将总共使用2.5 GB的内存,这对于32位应用程序本身是不可能的。
仅当AFAIK纹理“锁定”纹理以获取指向内存的指针时,它们才会映射到应用程序的地址空间。因此,我的假设是仅在锁定期间需要地址空间。由于仅锁定了一些纹理,因此不应占用整个地址空间。
最佳答案
当应用程序使用例如1.5 GB
的内存,它可以分配另外一个1
GB的纹理?
没有简单的答案,因为纹理可以在视频内存中分配,但是它们也可以在系统内存中。
因此,这取决于用法。
使用此构造函数,并注意Pool参数:
public Texture(
Device device,
int width,
int height,
int numLevels,
Usage usage,
Format format,
Pool pool
)
如果选择Pool.VideoMemory,则数据将放置在视频内存中,并且仅使用几个字节的几个成员存储在系统内存中。如果选择Pool.SystemMemory,那么您当然会使用内存分配空间。
当您获得视频内存纹理的表面指针并使用锁定位时:
surface->LockRect(&bits,0,0)
您实际上是在称为位的本地内存中分配一个新变量。因此,这种纹理的答案仍然是“否”。另一个变量使用内存分配空间,这就是您将位返回的变量。
在VideoMemory Pool上分配的DX纹理仅使用系统内存的几个字节进行分配。
希望能有所帮助,
火星。
关于directx - DirectX Textures是否共享/减少(32位)应用程序的地址空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234353/