directx - DirectX Textures是否共享/减少(32位)应用程序的地址空间?

标签 directx 32-bit

想象一下:

  • 一个32位应用程序,它具有2 GB的地址空间,因此可以分配最大2 GB的内存(旁边是碎片)
  • 具有1 GB图形内存的图形卡

  • 当应用程序使用例如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/

    相关文章:

    c++ - 文件加载太慢! (C++)

    windows - 在 Windows 32 位上构建 GMP

    docker - 如何在 Windows 10 32 位上运行 docker?

    python - 你如何在 python 中读取 32 位 TIFF 图像?

    c++ - 3d 空间中两个 vector 之间的角度

    c++ - 任意大小的 DirectX9 纹理(非 2^n)

    c# - HLSL:有问题的像素着色器代码(采样时 alpha 为零)?

    ios - 为什么此代码在 iPhone 5 上崩溃?

    android - 哪个 Eclipse 适用于 Android?

    c++ - Direct2D CreateTextLayout() - 如何获取插入符坐标