c++ - 当您泄漏 "device"和 "device context"时会发生什么 - 特别是 d3d?

标签 c++ memory-leaks direct3d device-driver

我不太清楚这些对象究竟如何发挥作用,从而在软件和硬件之间架起桥梁。如果您在终止进程时将它们泄漏到堆中,它们是否只是软件对象会被破坏?或者还有其他原因?

我问的原因是我忘记让我的初始化例程更改其状态机并因此切换例程导致它创建尽可能多的“DeviceContexts”和“设备”并将它们重新分配给相同的指针(通过 d3d11createdevice)在我发现我的内存泄漏大约 2GB 之前。

然后我突然想到,我真的不知道释放这些对象失败意味着什么。如果这些对象被泄露以至于我需要重置计算机,是否有我应该关注的硬件组件?还是终止进程几乎可以清理困惑?

为了确定,我冷重置了我的电脑。但是,如果您能确切地知道当您使用这样的低级接口(interface)并且未能正确销毁/释放它们时会发生什么,那就太好了。

最佳答案

当您的程序终止时,操作系统将清除所有这些设备上下文。否则,行为不当的程序可能会使系统停止运行。

您对损坏硬件的其他担忧(在评论中表达)也不应该存在。如果它是恶意程序,可能会造成各种破坏。您可能会通过直接访问硬件来损坏硬件,但这种访问正是驱动程序(以及位于您的程序和驱动程序之间的设备上下文)的用途。

关于c++ - 当您泄漏 "device"和 "device context"时会发生什么 - 特别是 d3d?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599749/

相关文章:

opengl - 3 个索引缓冲区

java - 面试问题 - 在排序数组 X 中搜索索引 i 使得 X[i] = i

c++ - 如何向 std::array 添加算术运算符?

ios - 具有大量数据 Swift 的 CollectionView

c++ - DirectX CreateBuffer 内存泄漏

direct3d - Direct3D 编程新手 : 11 vs 12

c++ - 使用单例时内存泄漏

c++ - 使用 CreateProcess 执行 rundll32.exe

wcf - 为什么这段代码会导致内存泄漏?