gpt4 book ai didi

c++ - 使用Callgrind追踪不必要的拷贝

转载 作者:行者123 更新时间:2023-12-02 10:29:38 25 4
gpt4 key购买 nike

我正在研究C++项目(光线跟踪器),并且一直在尝试并尝试优化代码库。我不是C++专家,而且我肯定我犯了很多新手错误,尤其是在意外复制周围(请参阅下文)。我一直在尝试查找代码的热门区域,但我注意到callgrind_annotate中输出的前几行主要是内部内存调用:

--------------------------------------------------------------------------------
Ir
--------------------------------------------------------------------------------
195,515,649 PROGRAM TOTALS

--------------------------------------------------------------------------------
Ir file:function
--------------------------------------------------------------------------------
14,526,540 src/matrix.cpp:matrix::operator*(tuple const&) const [./rt.debug.exe]
10,603,101 ???:_platform_memmove$VARIANT$Haswell [/usr/lib/system/libsystem_platform.dylib]
7,481,047 ???:tiny_free_no_lock [/usr/lib/system/libsystem_malloc.dylib]
7,290,995 ???:tiny_free_list_add_ptr [/usr/lib/system/libsystem_malloc.dylib]
6,463,127 ???:szone_malloc_should_clear [/usr/lib/system/libsystem_malloc.dylib]
6,411,076 ???:szone_size [/usr/lib/system/libsystem_malloc.dylib]
6,268,455 src/tuple.cpp:tuple::tuple(double const&, double const&, double const&, double const&) [./rt.debug.exe]
4,726,152 src/scene_objects/scene_object.cpp:scene_object::intersect(ray) [./rt.debug.exe]
4,705,650 ???:tiny_malloc_from_free_list [/usr/lib/system/libsystem_malloc.dylib]
4,415,582 ???:free [/usr/lib/system/libsystem_malloc.dylib]
...
显然,发生了一些额外的内存分配,如果我知道如何跟踪它,则不应删除这些内存分配。
因此,如何更好地跟踪是什么导致了这些额外的内存分配/取消分配?
注意:我已经在使用 -g-O3进行编译。

最佳答案

valgrind提供了几种方法来跟踪执行大量分配/取消分配的代码。
除其他外,valgrind memcheck和massif工具提供了一种记录对分配和释放函数的完整调用集的方法。然后可以使用诸如kcachegrind之类的工具将记录的数据可视化。
例如,使用memcheck,您可以执行以下操作:

valgrind --tool=memcheck --xtree-memory=full <your_program> <your_args>
然后(默认情况下)这将生成一个文件xtmemory.kcg。,您可以使用kcachegrind对其进行可视化。
有关更多信息,请参见 https://www.valgrind.org/docs/manual/manual-core.html#manual-core.xtree
dhat工具还允许检查分配了哪些内存,但是使用的时间不是很多。

关于c++ - 使用Callgrind追踪不必要的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62851447/

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