c++ - 分析我的代码(开源)和第 3 方代码(闭源)的内存使用情况的最佳策略

标签 c++ memory-management profiling cuda

我很快将负责对用 C/C++ 编写并使用 CUDA 来利用 GPU 处理的代码进行适当的内存分析。

我最初的想法是创建宏和运算符重载,使我能够在源代码中跟踪对 malloc、free、delete 和 new 的调用。我将能够包含不同的 header ,并使用 __FILE__ 和 __LINE__ 宏将内存调用打印到日志文件。此类策略可在此处找到:http://www.almostinfinite.com/memtrack.html

在第 3 方库中的链接中跟踪该使用情况的最佳方法是什么?我假设我几乎只能跟踪函数调用前后的内存使用情况,对吗?在我的宏/过载场景中,我可以简单地跟踪请求的大小来计算需要多少内存。我怎么知道第 3 方库使用了多少?这也是我的理解,跟踪“免费”并不能真正让您了解代码在任何特定时间使用了多少,因为它不一定返回给操作系统。我感谢对此事的任何讨论。

我真的不想使用任何内存分析工具,如 Totalview 或 valgrind,因为它们通常会做很多其他事情(边界检查等),这似乎会使软件运行非常慢。另一个原因是我希望它在某种程度上是线程安全的——我相信该软件使用 MPI 来生成进程。我将尝试实时对此进行概要分析,以便我可以转储到日志文件或其他进程可以读取的内容,以便在软件运行时可视化内存使用情况。这也将主要在 linux 环境中运行。

谢谢

最佳答案

也许链接器选项 --wrap=symbol 可以帮助您。可以在这里找到非常好的例子: man ld

关于c++ - 分析我的代码(开源)和第 3 方代码(闭源)的内存使用情况的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192531/

相关文章:

java - 如何分析负载下的性能?

python - 将 cProfile 结果与 KCacheGrind 一起使用

c++ - gcc -fsanitize 多维数组

c++ - Windows 10 上的 DirectX 11

c++ - 如果我跳出带有 "goto"的捕获 block ,我是否保证异常对象将被释放?

arrays - 内存 malloc 在 C 中如何工作?//我的代码有什么问题?

c# - C#中的内存异常

apache - 如何在apache tomcat中查找Web应用程序的内存使用情况

matlab - MATLAB OOP 速度慢还是我做错了什么?

c++ - -webkit-box-shadow 使用 QtWebKit 模糊?