gpt4 book ai didi

c++ - 如何在运行时确定数据的大小(分配和释放)

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:37 25 4
gpt4 key购买 nike

我有两个问题:

1.) 我想以功能方式对我的代码进行内存分析。代码可以有任何 STL 容器。有没有办法在 Linux 中执行此操作?

2.) 第二个是我太天真了!!如果我有一个数据结构

template < class T1 > struct somestruct
{
std::set < T1 > v1;
std::vector < T1 > v2;
std::vector < T1 > v3;
};

并且我知道 v1、v2 和 v3 的大小,那么我是否可以根据 sizeof(T1) 直接计算结构的大小,或者我是否需要处理填充?

最佳答案

我更喜欢使用 the valgrind massif heap profiler在 Linux 上:

valgrind --tool=massif ./testprogram

然后,

ms_print ./massif.out.16766 # replace with actual generated name

将为您提供一个图表,其中包含示例和峰值堆使用情况,以及像这样的 segmentation

19.63^                                               ###                      
| #
| # ::
| # : :::
| :::::::::# : : ::
| : # : : : ::
| : # : : : : :::
| : # : : : : : ::
| ::::::::::: # : : : : : : :::
| : : # : : : : : : : ::
| ::::: : # : : : : : : : : ::
| @@@: : : # : : : : : : : : : @
| ::@ : : : # : : : : : : : : : @
| :::: @ : : : # : : : : : : : : : @
| ::: : @ : : : # : : : : : : : : : @
| ::: : : @ : : : # : : : : : : : : : @
| :::: : : : @ : : : # : : : : : : : : : @
| ::: : : : : @ : : : # : : : : : : : : : @
| :::: : : : : : @ : : : # : : : : : : : : : @
| ::: : : : : : : @ : : : # : : : : : : : : : @
0 +----------------------------------------------------------------------->KB 0 29.48

Number of snapshots: 25
Detailed snapshots: [9, 14 (peak), 24]

segmentation 是这样的

--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
10 10,080 10,080 10,000 80 0
11 12,088 12,088 12,000 88 0
12 16,096 16,096 16,000 96 0
13 20,104 20,104 20,000 104 0
14 20,104 20,104 20,000 104 0
99.48% (20,000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->49.74% (10,000B) 0x804841A: main (example.c:20)
|
->39.79% (8,000B) 0x80483C2: g (example.c:5)
| ->19.90% (4,000B) 0x80483E2: f (example.c:11)
| | ->19.90% (4,000B) 0x8048431: main (example.c:23)
| |
| ->19.90% (4,000B) 0x8048436: main (example.c:25)
|
->09.95% (2,000B) 0x80483DA: f (example.c:10)
->09.95% (2,000B) 0x8048431: main (example.c:23)

关于c++ - 如何在运行时确定数据的大小(分配和释放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496427/

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