Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std容器尺寸调整的监控_C++_Stl_Gdb - Fatal编程技术网

C++ std容器尺寸调整的监控

C++ std容器尺寸调整的监控,c++,stl,gdb,C++,Stl,Gdb,我正在处理一个高性能代码库,由于容器大小的调整,该代码库遇到了一些性能问题。随着时间的推移,检查吞吐量或延迟显示了一种模式,其中以指数方式增加的延迟峰值被以指数方式增加的时间段分隔开,这表明随着容量的增加,容器的大小会翻倍 我很难通过手动搜索代码来跟踪哪个容器正在增长,我希望通过gdb跟踪容器预订 我是否可以设置一个断点(或多个断点),以便在容器保留更多空间时gdb停止执行?我不确定容器是向量、映射还是集合,因此如果这三个容器都依赖于相同的底层调用来调整大小,那可能是最好的。否则,我很乐意设置多

我正在处理一个高性能代码库,由于容器大小的调整,该代码库遇到了一些性能问题。随着时间的推移,检查吞吐量或延迟显示了一种模式,其中以指数方式增加的延迟峰值被以指数方式增加的时间段分隔开,这表明随着容量的增加,容器的大小会翻倍

我很难通过手动搜索代码来跟踪哪个容器正在增长,我希望通过gdb跟踪容器预订

我是否可以设置一个断点(或多个断点),以便在容器保留更多空间时gdb停止执行?我不确定容器是向量、映射还是集合,因此如果这三个容器都依赖于相同的底层调用来调整大小,那可能是最好的。否则,我很乐意设置多个断点

我是否可以设置一个断点(或多个断点),以便在容器保留更多空间时gdb停止执行

否:vector、map和set不共享一个公共的
调整大小
(除了最终进入
::operator new

您可以设置一个条件
::operator new
断点以获得相当大的大小,并查看从何处调用该断点

暗示着随着容量的增加,容器的大小会加倍


请注意,只有
vector
可以这样做,因此在
std::vector…::\u M_allocate
(对于
libstdc++
)上设置断点可能是一个很好的起点。

如果没有其他动态分配,可以在
操作符new
上设置断点。但是,如果有许多其他动态分配与此问题无关,则可能太吵了。最好是在知道代码将要调整大小时(例如,第一次添加元素时)单步执行代码,在到达调整大小的代码时添加断点