C++ std容器尺寸调整的监控
我正在处理一个高性能代码库,由于容器大小的调整,该代码库遇到了一些性能问题。随着时间的推移,检查吞吐量或延迟显示了一种模式,其中以指数方式增加的延迟峰值被以指数方式增加的时间段分隔开,这表明随着容量的增加,容器的大小会翻倍 我很难通过手动搜索代码来跟踪哪个容器正在增长,我希望通过gdb跟踪容器预订 我是否可以设置一个断点(或多个断点),以便在容器保留更多空间时gdb停止执行?我不确定容器是向量、映射还是集合,因此如果这三个容器都依赖于相同的底层调用来调整大小,那可能是最好的。否则,我很乐意设置多个断点 我是否可以设置一个断点(或多个断点),以便在容器保留更多空间时gdb停止执行 否:vector、map和set不共享一个公共的C++ std容器尺寸调整的监控,c++,stl,gdb,C++,Stl,Gdb,我正在处理一个高性能代码库,由于容器大小的调整,该代码库遇到了一些性能问题。随着时间的推移,检查吞吐量或延迟显示了一种模式,其中以指数方式增加的延迟峰值被以指数方式增加的时间段分隔开,这表明随着容量的增加,容器的大小会翻倍 我很难通过手动搜索代码来跟踪哪个容器正在增长,我希望通过gdb跟踪容器预订 我是否可以设置一个断点(或多个断点),以便在容器保留更多空间时gdb停止执行?我不确定容器是向量、映射还是集合,因此如果这三个容器都依赖于相同的底层调用来调整大小,那可能是最好的。否则,我很乐意设置多
调整大小
(除了最终进入::operator new
)
您可以设置一个条件::operator new
断点以获得相当大的大小,并查看从何处调用该断点
暗示着随着容量的增加,容器的大小会加倍
请注意,只有
vector
可以这样做,因此在std::vector…::\u M_allocate
(对于libstdc++
)上设置断点可能是一个很好的起点。如果没有其他动态分配,可以在操作符new
上设置断点。但是,如果有许多其他动态分配与此问题无关,则可能太吵了。最好是在知道代码将要调整大小时(例如,第一次添加元素时)单步执行代码,在到达调整大小的代码时添加断点