gpt4 book ai didi

c# - 跟踪 GPU 内存泄漏的专业方法(分配而不释放)

转载 作者:太空狗 更新时间:2023-10-29 21:43:35 26 4
gpt4 key购买 nike

我正在寻找有关如何在源代码中跟踪 GPU 内存泄漏源的建议。

我有一个大型的多线程 c#/c++ 应用程序,当重复执行某些特定操作时,它会遇到很小但确定性的内存泄漏问题。我还在这个应用程序旁边运行了内存扫描器,所以我可以实时跟踪内存使用统计信息。因为我知道哪些操作会导致内存使用量增长,所以我能够勾勒出发生这些坏事的代码框架。接下来,我在这些帧中放置断点,附加调试器,并逐步检查内存使用峰值。我想跟踪分配内存但从未释放的区域,从而导致泄漏。

我的调查方式真的很差(同时由于代码复杂和多线程运行而很难)。有什么专业的方法可以跟踪和解决此类问题吗?

最佳答案

我使用了一小部分工具,但是我发现以下工具提供了最简洁的工具集来满足我的需求,也许它们适合您的:

根据我正在做的事情以及我需要跟踪/追踪和分析的内容,我使用了上面的所有 4 个包。他们还有一个额外的好处:免费; b:维护良好; c:免费; d:定期更新; e: 免费。

如果你没有猜到我喜欢免费的部分:)

关于对象管理,我会推荐一个古老的 C++ 编码原则:一旦你创建了一个对象,添加删除它的行,每个新的应该总是(最终)有一个删除。这样你就知道你正在销毁你创建的对象,但是它不会将你从孤立内存块内存泄漏中拯救出来,你可以在其中更改指针指向的位置,例如:

myclass* firstInstance = new myclass();
myclass* secondInstance = new myclass();
firstInstance = secondInstance;
delete firstInstance;
delete secondInstance;

您现在将创建一个小的内存泄漏,其中真正的 firstInstance 的数据现在没有被任何指针指向。在大型代码库中很难检测到这种情况何时发生,而且应该更常见。

通常这些是您需要注意的配对,以确保您正确处理所有对象:

new -> delete
new[] -> delete[]
malloc() -> free() // or you can use realloc(0) instead of free()
calloc() -> free() // or you can use realloc(0) instead of free()
realloc(nonzero) -> free() // or you can use realloc(0) instead of free()

如果您是从一种具有垃圾收集功能的语言转到 C++,可能需要一段时间才能习惯,但它很快就会成为习惯:)

关于c# - 跟踪 GPU 内存泄漏的专业方法(分配而不释放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476314/

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