gpt4 book ai didi

c++ - 为什么我得到 E_OUTOFMEMORY?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:45 26 4
gpt4 key购买 nike

出于某种原因,下面的代码会给我一个内存不足的错误。我错过了什么?

    for(int n = 0; n < 512; ++n)
{
D3D11_TEXTURE2D_DESC texture_desc = {};
texture_desc.Width = 1920;
texture_desc.Height = 1080;
texture_desc.MipLevels = 1;
texture_desc.ArraySize = 1;
texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
texture_desc.SampleDesc.Count = 1;
texture_desc.Usage = D3D11_USAGE_DEFAULT;
texture_desc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;

ID3D11Texture2D* target_d3d_ptr;
HRESULT hr = this->device_ptr->CreateTexture2D(&texture_desc, nullptr, &target_d3d_ptr);
if(FAILED(hr))
throw runtime_error(_com_error(hr).ErrorMessage());

target_d3d_ptr->Release();
}

最佳答案

只是一个想法,但你有没有考虑过这个:1920 * 1080 * 32 位 = 8294400 字节现在,8294400 字节 x 485 纹理 = 3.836 GB 内存。这是 32 位机器的极限。我不知道您编写的是 32 位还是 64 位程序,但如果它是 32 位,那么您可以寻址的最大虚拟内存略低于 4GB,而 512 个纹理将超过此限制。考虑到 Release 不会立即释放此内存,并且如果您实际上是在 32 位中编码,那么内存不足的原因应该很清楚。

关于c++ - 为什么我得到 E_OUTOFMEMORY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com