|
From: <sv...@va...> - 2007-10-08 06:39:46
|
Author: njn
Date: 2007-10-08 07:39:48 +0100 (Mon, 08 Oct 2007)
New Revision: 6963
Log:
Implemented peak-taking -- it now records the peak allocation point in
detail, and draws it in the graph with a bar made of '#' chars.
Added:
branches/MASSIF2/massif/tests/peak.c
branches/MASSIF2/massif/tests/peak.post.exp
branches/MASSIF2/massif/tests/peak.stderr.exp
branches/MASSIF2/massif/tests/peak.vgtest
Modified:
branches/MASSIF2/massif/ms_main.c
branches/MASSIF2/massif/ms_print
branches/MASSIF2/massif/tests/Makefile.am
branches/MASSIF2/massif/tests/basic.post.exp
branches/MASSIF2/massif/tests/culling1.stderr.exp
branches/MASSIF2/massif/tests/culling2.stderr.exp
branches/MASSIF2/massif/tests/long-time.post.exp
branches/MASSIF2/massif/tests/one.c
branches/MASSIF2/massif/tests/realloc.post.exp
branches/MASSIF2/massif/tests/realloc.stderr.exp
branches/MASSIF2/massif/tests/realloc.vgtest
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/ms_main.c 2007-10-08 06:39:48 UTC (rev 6963)
@@ -137,6 +137,10 @@
// respect single quotes...]
// - Explain the --threshold=0 case -- entries with zero bytes must have
// allocated some memory and then freed it all again.
+// - Explain that no peak will be taken if no deallocations are done.
+// - Explain how the stack is computed -- size is assumed to be zero when
+// code starts executing, which isn't true, but reflects what you have
+// control over in a normal program.
//
// Tests:
// - tests/overloaded_new.cpp is there
@@ -233,6 +237,8 @@
static UInt n_getXCon_redo = 0;
static UInt n_cullings = 0;
static UInt n_real_snapshots = 0;
+static UInt n_detailed_snapshots = 0;
+static UInt n_peak_snapshots = 0;
static UInt n_skipped_snapshots = 0;
static UInt n_skipped_snapshots_since_last_snapshot = 0;
@@ -245,6 +251,10 @@
static SSizeT heap_szB = 0; // Live heap size
static SSizeT stacks_szB = 0; // Live stacks size
+// This is the total size from the current peak snapshot, or 0 if no peak
+// snapshot has been taken yet.
+static SSizeT peak_snapshot_total_szB = 0;
+
// Incremented every time memory is allocated/deallocated, by the
// allocated/deallocated amount; includes heap, heap-admin and stack
// memory. An alternative to milliseconds as a unit of program "time".
@@ -832,6 +842,7 @@
typedef
enum {
Normal = 77,
+ Peak,
Unused
}
SnapshotKind;
@@ -871,6 +882,13 @@
return (snapshot->alloc_xpt ? True : False);
}
+static Bool is_uncullable_snapshot(Snapshot* snapshot)
+{
+ return &snapshots[0] == snapshot // First snapshot
+ || &snapshots[next_snapshot_i-1] == snapshot // Last snapshot
+ || snapshot->kind == Peak; // Peak snapshot
+}
+
static void sanity_check_snapshot(Snapshot* snapshot)
{
if (snapshot->alloc_xpt) {
@@ -922,6 +940,7 @@
Snapshot* snapshot = &snapshots[i];
Char* suffix;
switch (snapshot->kind) {
+ case Peak: suffix = "p"; break;
case Normal: suffix = ( is_detailed_snapshot(snapshot) ? "d" : "." ); break;
case Unused: suffix = "u"; break;
default:
@@ -985,7 +1004,8 @@
while (jn < MAX_N_SNAPSHOTS) {
Time timespan = snapshots[jn].time - snapshots[jp].time;
tl_assert(timespan >= 0);
- if (timespan < min_timespan) {
+ // Nb: We never cull the peak snapshot.
+ if (Peak != snapshots[j].kind && timespan < min_timespan) {
min_timespan = timespan;
min_j = j;
}
@@ -1028,15 +1048,31 @@
// two intervals around a snapshot that was under consideration for
// deletion. Here we only measure single intervals because all the
// deletions have occurred.
+ //
+ // But we have to be careful -- some snapshots (eg. snapshot 0, and the
+ // peak snapshot) are uncullable. If two uncullable snapshots end up
+ // next to each other, they'll never be culled (assuming the peak doesn't
+ // change), and the time gap between them will not change. However, the
+ // time between the remaining cullable snapshots will grow ever larger.
+ // This means that the min_timespan found will always be that between the
+ // two uncullable snapshots, and it will be much smaller than it should
+ // be. To avoid this problem, when computing the minimum timespan, we
+ // ignore any timespans between two uncullable snapshots.
tl_assert(next_snapshot_i > 1);
min_timespan = 0x7fffffffffffffffLL;
min_timespan_i = -1;
for (i = 1; i < next_snapshot_i; i++) {
- Time timespan = snapshots[i].time - snapshots[i-1].time;
- tl_assert(timespan >= 0);
- if (timespan < min_timespan) {
- min_timespan = timespan;
- min_timespan_i = i;
+ if (is_uncullable_snapshot(&snapshots[i]) &&
+ is_uncullable_snapshot(&snapshots[i-1]))
+ {
+ VERB(1, "(Ignoring interval %d--%d when computing minimum)", i-1, i);
+ } else {
+ Time timespan = snapshots[i].time - snapshots[i-1].time;
+ tl_assert(timespan >= 0);
+ if (timespan < min_timespan) {
+ min_timespan = timespan;
+ min_timespan_i = i;
+ }
}
}
tl_assert(-1 != min_timespan_i); // Check we found a minimum.
@@ -1121,11 +1157,13 @@
sanity_check_snapshot(snapshot);
// Update stats.
+ if (Peak == kind) n_peak_snapshots++;
+ if (is_detailed) n_detailed_snapshots++;
n_real_snapshots++;
}
-// Take a snapshot, if it's time.
+// Take a snapshot, if it's time, or if we've hit a peak.
static void
maybe_take_snapshot(SnapshotKind kind, Char* what)
{
@@ -1154,6 +1192,21 @@
is_detailed = (0 == n_snapshots_until_next_detailed);
break;
+ case Peak: {
+ // Because we're about to do a deallocation, we're coming down from a
+ // local peak. If it is (a) actually a global peak, and (b) a certain
+ // amount bigger than the previous peak, then we take a peak snapshot.
+ //
+ // XXX: make the percentage configurable
+ SizeT total_szB = heap_szB + clo_heap_admin*n_heap_blocks + stacks_szB;
+ double excess_over_previous_peak = 1.00;
+ if (total_szB <= peak_snapshot_total_szB * excess_over_previous_peak) {
+ return;
+ }
+ is_detailed = True;
+ break;
+ }
+
default:
tl_assert2(0, "maybe_take_snapshot: unrecognised snapshot kind");
}
@@ -1169,6 +1222,26 @@
n_snapshots_until_next_detailed--;
}
+ // Update peak data, if it's a Peak snapshot.
+ if (Peak == kind) {
+ Int i, number_of_peaks_snapshots_found = 0;
+
+ // Sanity check the size, then update our recorded peak.
+ SizeT snapshot_total_szB =
+ snapshot->heap_szB + snapshot->heap_admin_szB + snapshot->stacks_szB;
+ tl_assert(snapshot_total_szB > peak_snapshot_total_szB);
+ peak_snapshot_total_szB = snapshot_total_szB;
+
+ // Find the old peak snapshot, if it exists, and mark it as normal.
+ for (i = 0; i < next_snapshot_i; i++) {
+ if (Peak == snapshots[i].kind) {
+ snapshots[i].kind = Normal;
+ number_of_peaks_snapshots_found++;
+ }
+ }
+ tl_assert(number_of_peaks_snapshots_found <= 1);
+ }
+
// Finish up verbosity and stats stuff.
if (n_skipped_snapshots_since_last_snapshot > 0) {
VERB(1, " (skipped %d snapshot%s)",
@@ -1311,6 +1384,9 @@
}
die_szB = hc->szB;
+ // Maybe take a peak snapshot, since it's a deallocation.
+ maybe_take_snapshot(Peak, "de-PEAK");
+
// Update heap stats
update_heap_stats(-die_szB, /*n_heap_blocks_delta*/-1);
@@ -1352,6 +1428,11 @@
old_szB = hc->szB;
+ // Maybe take a peak snapshot, if it's (effectively) a deallocation.
+ if (new_szB < old_szB) {
+ maybe_take_snapshot(Peak, "re-PEAK");
+ }
+
// Update heap stats
update_heap_stats(new_szB - old_szB, /*n_heap_blocks_delta*/0);
@@ -1481,6 +1562,7 @@
if (have_started_executing_code) {
VERB(2, "<<< die_mem_stack (%ld)", -len);
n_stack_frees++;
+ maybe_take_snapshot(Peak, "stkPEAK");
update_stack_stats(-len);
maybe_take_snapshot(Normal, what);
VERB(2, ">>>");
@@ -1555,7 +1637,6 @@
have_started_executing_code = True;
maybe_take_snapshot(Normal, "startup");
}
-
return bb_in;
}
@@ -1692,7 +1773,7 @@
snapshot->heap_szB + snapshot->heap_admin_szB + snapshot->stacks_szB;
depth_str[0] = '\0'; // Initialise depth_str to "".
- FP("heap_tree=...\n");
+ FP("heap_tree=%s\n", ( Peak == snapshot->kind ? "peak" : "detailed" ));
pp_snapshot_XPt(fd, snapshot->alloc_xpt, 0, depth_str,
depth_str_len, snapshot->heap_szB,
snapshot_total_szB);
@@ -1787,6 +1868,8 @@
VERB(1, "XPt-later-expansions: %u", n_xpt_later_expansions);
VERB(1, "skipped snapshots: %u", n_skipped_snapshots);
VERB(1, "real snapshots: %u", n_real_snapshots);
+ VERB(1, "detailed snapshots: %u", n_detailed_snapshots);
+ VERB(1, "peak snapshots: %u", n_peak_snapshots);
VERB(1, "cullings: %u", n_cullings);
VERB(1, "XCon_redos: %u", n_getXCon_redo);
}
@@ -1811,7 +1894,7 @@
}
if (clo_stacks) {
- // Events to track
+ // Events to track.
VG_(track_new_mem_stack) ( new_mem_stack );
VG_(track_die_mem_stack) ( die_mem_stack );
VG_(track_new_mem_stack_signal) ( new_mem_stack_signal );
Modified: branches/MASSIF2/massif/ms_print
===================================================================
--- branches/MASSIF2/massif/ms_print 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/ms_print 2007-10-08 06:39:48 UTC (rev 6963)
@@ -332,6 +332,8 @@
my @times = ();
my @mem_total_Bs = ();
my @is_detaileds = ();
+ my $peak_num = -1; # An initial value that will be ok if no peak
+ # entry is in the file.
#-------------------------------------------------------------------------
# Read start of input file.
@@ -415,7 +417,11 @@
# snapshot list header to $tmp_file.
if ($heap_tree eq "empty") {
$line = get_line();
- } elsif ($heap_tree eq "...") {
+ } elsif ($heap_tree =~ "(detailed|peak)") {
+ # If "peak", remember the number.
+ if ($heap_tree eq "peak") {
+ $peak_num = $snapshot_num;
+ }
# '1' means it's the top node of the tree.
read_heap_tree(1, "", "", "", $mem_total_B);
@@ -489,6 +495,7 @@
# 10 | ..::::::::: 1 (1 - 1/2) * 10 = 5 1 * 10 = 10
# 0 +-------------
+ my $peak_full_char = '#';
my $detailed_full_char = '@';
my $normal_full_char = ':';
my $half_char = '.';
@@ -517,20 +524,28 @@
($x == $graph_x+1) or die;
$x = $graph_x;
}
-
- # Draw the column only if it's a detailed snapshot, or we don't
- # already have a detailed snapshot's bar in this column -- we don't
- # want to overwrite detailed snapshot's bars with non-detailed
- # snapshot's bars.
+
+ # Draw the column if:
+ # - it's the peak column, or
+ # - it's a detailed column, and we won't overwrite the peak column, or
+ # - it's a normal column, and we won't overwrite the peak column or a
+ # detailed column.
my $should_draw_column =
- ($is_detaileds[$i] or $graph[$x][0] ne $detailed_full_char);
+ (($i == $peak_num) or
+ ($is_detaileds[$i] and $graph[$x][0] ne $peak_full_char) or
+ ($graph[$x][0] ne $peak_full_char and
+ $graph[$x][0] ne $detailed_full_char));
+
if ($should_draw_column) {
# If it's detailed, mark the X-axis. Also choose the full-slot
# char.
my $full_char;
- if ($is_detaileds[$i]) {
- $graph[$x][0] = $detailed_full_char;
+ if ($i == $peak_num) {
+ $full_char = $peak_full_char;
+ $graph[$x][0] = $full_char;
+ } elsif ($is_detaileds[$i]) {
$full_char = $detailed_full_char;
+ $graph[$x][0] = $full_char;
} else {
$full_char = $normal_full_char;
}
@@ -591,6 +606,9 @@
} else {
printf(", $i");
}
+ if ($i == $peak_num) {
+ print(" (peak)");
+ }
}
}
print("]\n");
Modified: branches/MASSIF2/massif/tests/Makefile.am
===================================================================
--- branches/MASSIF2/massif/tests/Makefile.am 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/tests/Makefile.am 2007-10-08 06:39:48 UTC (rev 6963)
@@ -10,9 +10,11 @@
basic.post.exp basic.stderr.exp basic.vgtest \
culling1.stderr.exp culling1.vgtest \
culling2.stderr.exp culling2.vgtest \
+ ignoring.post.exp ignoring.stderr.exp ignoring.vgtest \
long-time.post.exp long-time.stderr.exp long-time.vgtest \
null.post.exp null.stderr.exp null.vgtest \
one.post.exp one.stderr.exp one.vgtest \
+ peak.post.exp peak.stderr.exp peak.vgtest \
realloc.post.exp realloc.stderr.exp realloc.vgtest \
thresholds_0_0.post.exp thresholds_0_0.stderr.exp thresholds_0_0.vgtest \
thresholds_0_10.post.exp thresholds_0_10.stderr.exp thresholds_0_10.vgtest \
@@ -30,9 +32,11 @@
alloc-fns \
basic \
culling1 culling2 \
+ ignoring \
long-time \
null \
one \
+ peak \
realloc \
thresholds \
zero
Modified: branches/MASSIF2/massif/tests/basic.post.exp
===================================================================
--- branches/MASSIF2/massif/tests/basic.post.exp 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/tests/basic.post.exp 2007-10-08 06:39:48 UTC (rev 6963)
@@ -6,31 +6,31 @@
KB
-3.797^ :
- | .:::.
- | .::::::@.
- | .::::::::@::.
- | .@:::::::::@::::.
- | ::@:::::::::@::::::
- | .:::@:::::::::@:::::::.
- | .:::::@:::::::::@:::::::::.
- | .:::::::@:::::::::@:::::::::@:.
- | .:::::::::@:::::::::@:::::::::@:::.
- | :@:::::::::@:::::::::@:::::::::@:::::
- | .::@:::::::::@:::::::::@:::::::::@::::::.
- | .::::@:::::::::@:::::::::@:::::::::@::::::::.
- | .::::::@:::::::::@:::::::::@:::::::::@:::::::::@.
- | .::::::::@:::::::::@:::::::::@:::::::::@:::::::::@::.
- | @:::::::::@:::::::::@:::::::::@:::::::::@:::::::::@::::
- | .:@:::::::::@:::::::::@:::::::::@:::::::::@:::::::::@:::::.
- | .:::@:::::::::@:::::::::@:::::::::@:::::::::@:::::::::@:::::::.
- | .:::::@:::::::::@:::::::::@:::::::::@:::::::::@:::::::::@:::::::::.
- | .:::::::@:::::::::@:::::::::@:::::::::@:::::::::@:::::::::@:::::::::@:.
- 0 +---------@---------@---------@---------@---------@---------@---------@->KB
+3.797^ #
+ | .:#:.
+ | .:::#:::.
+ | .:::::#:::::.
+ | .@::::::#:::::::.
+ | ::@::::::#:::::::::
+ | .:::@::::::#:::::::::@.
+ | .:::::@::::::#:::::::::@::.
+ | .:::::::@::::::#:::::::::@::::.
+ | .:::::::::@::::::#:::::::::@::::::.
+ | :@:::::::::@::::::#:::::::::@::::::::
+ | .::@:::::::::@::::::#:::::::::@:::::::::.
+ | .::::@:::::::::@::::::#:::::::::@:::::::::@:.
+ | .::::::@:::::::::@::::::#:::::::::@:::::::::@:::.
+ | .::::::::@:::::::::@::::::#:::::::::@:::::::::@:::::.
+ | @:::::::::@:::::::::@::::::#:::::::::@:::::::::@:::::::
+ | .:@:::::::::@:::::::::@::::::#:::::::::@:::::::::@::::::::.
+ | .:::@:::::::::@:::::::::@::::::#:::::::::@:::::::::@:::::::::@.
+ | .:::::@:::::::::@:::::::::@::::::#:::::::::@:::::::::@:::::::::@::.
+ | .:::::::@:::::::::@:::::::::@::::::#:::::::::@:::::::::@:::::::::@::::.
+ 0 +---------@---------@---------@------#---------@---------@---------@---->KB
0 7.488
-Number of snapshots: 72
- Detailed snapshots: [9, 19, 29, 39, 49, 59, 69]
+Number of snapshots: 73
+ Detailed snapshots: [9, 19, 29, 37 (peak), 47, 57, 67]
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
@@ -89,62 +89,63 @@
34 3,672 3,672 3,400 272 0
35 3,780 3,780 3,500 280 0
36 3,888 3,888 3,600 288 0
- 37 3,996 3,780 3,500 280 0
- 38 4,104 3,672 3,400 272 0
- 39 4,212 3,564 3,300 264 0
-92.59% (3300B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->92.59% (3300B) 0x80483E5: main (basic.c:14)
+ 37 3,888 3,888 3,600 288 0
+92.59% (3600B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->92.59% (3600B) 0x80483E5: main (basic.c:14)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 40 4,320 3,456 3,200 256 0
- 41 4,428 3,348 3,100 248 0
- 42 4,536 3,240 3,000 240 0
- 43 4,644 3,132 2,900 232 0
- 44 4,752 3,024 2,800 224 0
- 45 4,860 2,916 2,700 216 0
- 46 4,968 2,808 2,600 208 0
- 47 5,076 2,700 2,500 200 0
- 48 5,184 2,592 2,400 192 0
- 49 5,292 2,484 2,300 184 0
-92.59% (2300B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->92.59% (2300B) 0x80483E5: main (basic.c:14)
+ 38 3,996 3,780 3,500 280 0
+ 39 4,104 3,672 3,400 272 0
+ 40 4,212 3,564 3,300 264 0
+ 41 4,320 3,456 3,200 256 0
+ 42 4,428 3,348 3,100 248 0
+ 43 4,536 3,240 3,000 240 0
+ 44 4,644 3,132 2,900 232 0
+ 45 4,752 3,024 2,800 224 0
+ 46 4,860 2,916 2,700 216 0
+ 47 4,968 2,808 2,600 208 0
+92.59% (2600B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->92.59% (2600B) 0x80483E5: main (basic.c:14)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 50 5,400 2,376 2,200 176 0
- 51 5,508 2,268 2,100 168 0
- 52 5,616 2,160 2,000 160 0
- 53 5,724 2,052 1,900 152 0
- 54 5,832 1,944 1,800 144 0
- 55 5,940 1,836 1,700 136 0
- 56 6,048 1,728 1,600 128 0
- 57 6,156 1,620 1,500 120 0
- 58 6,264 1,512 1,400 112 0
- 59 6,372 1,404 1,300 104 0
-92.59% (1300B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->92.59% (1300B) 0x80483E5: main (basic.c:14)
+ 48 5,076 2,700 2,500 200 0
+ 49 5,184 2,592 2,400 192 0
+ 50 5,292 2,484 2,300 184 0
+ 51 5,400 2,376 2,200 176 0
+ 52 5,508 2,268 2,100 168 0
+ 53 5,616 2,160 2,000 160 0
+ 54 5,724 2,052 1,900 152 0
+ 55 5,832 1,944 1,800 144 0
+ 56 5,940 1,836 1,700 136 0
+ 57 6,048 1,728 1,600 128 0
+92.59% (1600B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->92.59% (1600B) 0x80483E5: main (basic.c:14)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 60 6,480 1,296 1,200 96 0
- 61 6,588 1,188 1,100 88 0
- 62 6,696 1,080 1,000 80 0
- 63 6,804 972 900 72 0
- 64 6,912 864 800 64 0
- 65 7,020 756 700 56 0
- 66 7,128 648 600 48 0
- 67 7,236 540 500 40 0
- 68 7,344 432 400 32 0
- 69 7,452 324 300 24 0
-92.59% (300B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->92.59% (300B) 0x80483E5: main (basic.c:14)
+ 58 6,156 1,620 1,500 120 0
+ 59 6,264 1,512 1,400 112 0
+ 60 6,372 1,404 1,300 104 0
+ 61 6,480 1,296 1,200 96 0
+ 62 6,588 1,188 1,100 88 0
+ 63 6,696 1,080 1,000 80 0
+ 64 6,804 972 900 72 0
+ 65 6,912 864 800 64 0
+ 66 7,020 756 700 56 0
+ 67 7,128 648 600 48 0
+92.59% (600B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->92.59% (600B) 0x80483E5: main (basic.c:14)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 70 7,560 216 200 16 0
- 71 7,668 108 100 8 0
+ 68 7,236 540 500 40 0
+ 69 7,344 432 400 32 0
+ 70 7,452 324 300 24 0
+ 71 7,560 216 200 16 0
+ 72 7,668 108 100 8 0
Modified: branches/MASSIF2/massif/tests/culling1.stderr.exp
===================================================================
--- branches/MASSIF2/massif/tests/culling1.stderr.exp 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/tests/culling1.stderr.exp 2007-10-08 06:39:48 UTC (rev 6963)
@@ -425,5 +425,7 @@
Massif: XPt-later-expansions: 0
Massif: skipped snapshots: 51
Massif: real snapshots: 150
+Massif: detailed snapshots: 15
+Massif: peak snapshots: 0
Massif: cullings: 2
Massif: XCon_redos: 0
Modified: branches/MASSIF2/massif/tests/culling2.stderr.exp
===================================================================
--- branches/MASSIF2/massif/tests/culling2.stderr.exp 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/tests/culling2.stderr.exp 2007-10-08 06:39:48 UTC (rev 6963)
@@ -528,5 +528,7 @@
Massif: XPt-later-expansions: 0
Massif: skipped snapshots: 1
Massif: real snapshots: 200
+Massif: detailed snapshots: 20
+Massif: peak snapshots: 0
Massif: cullings: 3
Massif: XCon_redos: 0
Modified: branches/MASSIF2/massif/tests/long-time.post.exp
===================================================================
--- branches/MASSIF2/massif/tests/long-time.post.exp 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/tests/long-time.post.exp 2007-10-08 06:39:48 UTC (rev 6963)
@@ -6,38 +6,52 @@
MB
-2.193^ : @ : @ : @ : @ : @ :
- | : @ : @ : @ : @ : @ :
- | : @ : @ : @ : @ : @ :
- | ........: . . . . . @. . @ . @ :. @. :. @. :.
- | ::::::::: : @ : : : @: : @ : @ :: @: :: @: ::
- | ::::::::: : @ : : : @: : @ : @ :: @: :: @: ::
- | ::::::::: : @ : : : @: : @ : @ :: @: :: @: ::
- | ::::::::: : @ : : : @: : @ : @ :: @: :: @: ::
- | ::::::::: : @ : : : @: : @ : @ :: @: :: @: ::
- | ::::::::: : @ : : : @: : @ : @ :: @: :: @: ::
- |.. ::::::::.::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |:: :::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::.......:::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- |::@:::::::::::::::::::::::: : @ : : : @: :: :@ :: :@ ::::@:::: @: ::
- 0 +--@-----------------------------@------@--@------@-----@-----@-----@--->GB
- 0 11.10
+2.193^#: : : @ : :
+ |#: : : @ : :
+ |#: : : @ : :
+ |#: :. :. . @. :. .
+ |#: :: :: : @: :@ :
+ |#: :: :: : @: :@ :
+ |#: :: :: : @: :@ :
+ |#: :: :: : @: :@ :
+ |#: :: :: : @: :@ :
+ |#: :: :: : @: :@ :
+ |#: :: :: : @: :@ : :. :. :. :. :. :. :. . :. :. :. :
+ |#: :: :: : @: :@ : :: :: :: :: :@ :: :: : :: :@ :: :
+ |#:..................:: :: : @: :@ : ::.::.::.:: :@ :: :: .: :: :@ :: :
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::.:@.::.::.@:.::.:@.::.:
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::::@:::::::@::::::@:::::
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::::@:::::::@::::::@:::::
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::::@:::::::@::::::@:::::
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::::@:::::::@::::::@:::::
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::::@:::::::@::::::@:::::
+ |#::::@:::::::::::::::: :: : @: :@ : :::::@:::::::@:::::::@::::::@:::::
+ 0 +#----@----------------@---@--@---@---@-----@-------@-------@------@---->GB
+ 0 11.15
-Number of snapshots: 97
- Detailed snapshots: [3, 40, 46, 49, 59, 69, 79, 89]
+Number of snapshots: 94
+ Detailed snapshots: [1 (peak), 7, 28, 33, 38, 43, 48, 56, 66, 76, 86]
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
- 1 122,700,000 1,100,000 1,100,000 0 0
- 2 250,700,000 1,100,000 1,100,000 0 0
- 3 399,100,000 900,000 900,000 0 0
+ 1 3,900,000 2,300,000 2,300,000 0 0
+100.00% (2300000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->52.17% (1200000B) 0x8048418: main (long-time.c:15)
+|
+->47.83% (1100000B) 0x80483F7: main (long-time.c:13)
+|
+->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 2 227,900,000 2,300,000 2,300,000 0 0
+ 3 383,100,000 900,000 900,000 0 0
+ 4 607,100,000 900,000 900,000 0 0
+ 5 735,100,000 900,000 900,000 0 0
+ 6 863,100,000 900,000 900,000 0 0
+ 7 991,100,000 900,000 900,000 0 0
100.00% (900000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->100.00% (900000B) 0x8048447: main (long-time.c:18)
|
@@ -46,68 +60,49 @@
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 4 527,100,000 900,000 900,000 0 0
- 5 655,100,000 900,000 900,000 0 0
- 6 783,100,000 900,000 900,000 0 0
- 7 911,100,000 900,000 900,000 0 0
- 8 1,039,100,000 900,000 900,000 0 0
- 9 1,167,100,000 900,000 900,000 0 0
- 10 1,295,100,000 900,000 900,000 0 0
- 11 1,423,100,000 900,000 900,000 0 0
- 12 1,551,100,000 900,000 900,000 0 0
- 13 1,653,000,000 1,200,000 1,200,000 0 0
- 14 1,789,000,000 1,200,000 1,200,000 0 0
- 15 1,925,000,000 1,200,000 1,200,000 0 0
- 16 2,061,000,000 1,200,000 1,200,000 0 0
- 17 2,197,000,000 1,200,000 1,200,000 0 0
- 18 2,333,000,000 1,200,000 1,200,000 0 0
- 19 2,469,000,000 1,200,000 1,200,000 0 0
- 20 2,605,000,000 1,200,000 1,200,000 0 0
- 21 2,741,000,000 1,200,000 1,200,000 0 0
- 22 2,930,700,000 1,100,000 1,100,000 0 0
- 23 3,041,900,000 1,900,000 1,900,000 0 0
- 24 3,153,900,000 1,900,000 1,900,000 0 0
- 25 3,265,900,000 1,900,000 1,900,000 0 0
- 26 3,377,900,000 1,900,000 1,900,000 0 0
- 27 3,489,900,000 1,900,000 1,900,000 0 0
- 28 3,601,900,000 1,900,000 1,900,000 0 0
- 29 3,713,900,000 1,900,000 1,900,000 0 0
- 30 3,825,900,000 1,900,000 1,900,000 0 0
- 31 3,937,900,000 1,900,000 1,900,000 0 0
- 32 4,049,900,000 1,900,000 1,900,000 0 0
- 33 4,161,900,000 1,900,000 1,900,000 0 0
- 34 4,273,900,000 1,900,000 1,900,000 0 0
- 35 4,467,900,000 2,300,000 2,300,000 0 0
- 36 4,688,000,000 0 0 0 0
- 37 4,798,200,000 0 0 0 0
- 38 5,017,900,000 1,900,000 1,900,000 0 0
- 39 5,238,200,000 0 0 0 0
- 40 5,457,900,000 1,900,000 1,900,000 0 0
-100.00% (1900000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->57.89% (1100000B) 0x80483F7: main (long-time.c:13)
-|
-->42.11% (800000B) 0x80483E4: main (long-time.c:12)
-|
+ 8 1,119,100,000 900,000 900,000 0 0
+ 9 1,247,100,000 900,000 900,000 0 0
+ 10 1,375,100,000 900,000 900,000 0 0
+ 11 1,503,100,000 900,000 900,000 0 0
+ 12 1,679,100,000 900,000 900,000 0 0
+ 13 1,807,100,000 900,000 900,000 0 0
+ 14 1,935,100,000 900,000 900,000 0 0
+ 15 2,063,100,000 900,000 900,000 0 0
+ 16 2,191,100,000 900,000 900,000 0 0
+ 17 2,319,100,000 900,000 900,000 0 0
+ 18 2,447,100,000 900,000 900,000 0 0
+ 19 2,575,100,000 900,000 900,000 0 0
+ 20 2,703,100,000 900,000 900,000 0 0
+ 21 2,831,100,000 900,000 900,000 0 0
+ 22 2,959,100,000 900,000 900,000 0 0
+ 23 3,087,100,000 900,000 900,000 0 0
+ 24 3,215,100,000 900,000 900,000 0 0
+ 25 3,342,200,000 0 0 0 0
+ 26 3,467,900,000 2,300,000 2,300,000 0 0
+ 27 3,593,900,000 1,900,000 1,900,000 0 0
+ 28 3,720,000,000 0 0 0 0
+00.00% (0B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 41 5,678,200,000 0 0 0 0
- 42 5,897,900,000 1,900,000 1,900,000 0 0
- 43 6,118,200,000 0 0 0 0
- 44 6,337,900,000 1,900,000 1,900,000 0 0
- 45 6,448,000,000 0 0 0 0
- 46 6,558,200,000 0 0 0 0
+ 29 3,846,200,000 0 0 0 0
+ 30 3,971,900,000 2,300,000 2,300,000 0 0
+ 31 4,097,900,000 1,900,000 1,900,000 0 0
+ 32 4,224,000,000 0 0 0 0
+ 33 4,350,200,000 0 0 0 0
00.00% (0B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 47 6,777,900,000 1,900,000 1,900,000 0 0
- 48 6,888,000,000 0 0 0 0
- 49 7,107,900,000 2,300,000 2,300,000 0 0
+ 34 4,475,900,000 2,300,000 2,300,000 0 0
+ 35 4,601,900,000 1,900,000 1,900,000 0 0
+ 36 4,728,000,000 0 0 0 0
+ 37 4,854,200,000 0 0 0 0
+ 38 4,979,900,000 2,300,000 2,300,000 0 0
100.00% (2300000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->52.17% (1200000B) 0x8048418: main (long-time.c:15)
|
@@ -118,90 +113,106 @@
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 50 7,209,900,000 1,900,000 1,900,000 0 0
- 51 7,312,000,000 0 0 0 0
- 52 7,414,200,000 0 0 0 0
- 53 7,517,000,000 1,200,000 1,200,000 0 0
- 54 7,619,900,000 2,300,000 2,300,000 0 0
- 55 7,721,900,000 1,900,000 1,900,000 0 0
- 56 7,824,000,000 0 0 0 0
- 57 7,926,200,000 0 0 0 0
- 58 8,029,000,000 1,200,000 1,200,000 0 0
- 59 8,131,900,000 2,300,000 2,300,000 0 0
-100.00% (2300000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->52.17% (1200000B) 0x8048418: main (long-time.c:15)
+ 39 5,105,900,000 1,900,000 1,900,000 0 0
+ 40 5,232,000,000 0 0 0 0
+ 41 5,358,200,000 0 0 0 0
+ 42 5,483,900,000 2,300,000 2,300,000 0 0
+ 43 5,609,900,000 1,900,000 1,900,000 0 0
+100.00% (1900000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->57.89% (1100000B) 0x80483F7: main (long-time.c:13)
|
-->47.83% (1100000B) 0x80483F7: main (long-time.c:13)
+->42.11% (800000B) 0x80483E4: main (long-time.c:12)
|
->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 60 8,233,900,000 1,900,000 1,900,000 0 0
- 61 8,336,000,000 0 0 0 0
- 62 8,438,200,000 0 0 0 0
- 63 8,541,000,000 1,200,000 1,200,000 0 0
- 64 8,643,900,000 2,300,000 2,300,000 0 0
- 65 8,745,900,000 1,900,000 1,900,000 0 0
- 66 8,848,000,000 0 0 0 0
- 67 8,950,200,000 0 0 0 0
- 68 9,053,000,000 1,200,000 1,200,000 0 0
- 69 9,155,900,000 2,300,000 2,300,000 0 0
-100.00% (2300000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->52.17% (1200000B) 0x8048418: main (long-time.c:15)
+ 44 5,736,000,000 0 0 0 0
+ 45 5,862,200,000 0 0 0 0
+ 46 5,987,900,000 2,300,000 2,300,000 0 0
+ 47 6,113,900,000 1,900,000 1,900,000 0 0
+ 48 6,240,000,000 0 0 0 0
+00.00% (0B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 49 6,429,000,000 1,200,000 1,200,000 0 0
+ 50 6,554,700,000 1,100,000 1,100,000 0 0
+ 51 6,680,800,000 800,000 800,000 0 0
+ 52 6,807,100,000 900,000 900,000 0 0
+ 53 6,933,000,000 1,200,000 1,200,000 0 0
+ 54 7,058,700,000 1,100,000 1,100,000 0 0
+ 55 7,184,800,000 800,000 800,000 0 0
+ 56 7,311,100,000 900,000 900,000 0 0
+100.00% (900000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->100.00% (900000B) 0x8048447: main (long-time.c:18)
|
-->47.83% (1100000B) 0x80483F7: main (long-time.c:13)
+->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 57 7,437,000,000 1,200,000 1,200,000 0 0
+ 58 7,562,700,000 1,100,000 1,100,000 0 0
+ 59 7,688,800,000 800,000 800,000 0 0
+ 60 7,815,100,000 900,000 900,000 0 0
+ 61 7,941,000,000 1,200,000 1,200,000 0 0
+ 62 8,066,700,000 1,100,000 1,100,000 0 0
+ 63 8,192,800,000 800,000 800,000 0 0
+ 64 8,319,100,000 900,000 900,000 0 0
+ 65 8,445,000,000 1,200,000 1,200,000 0 0
+ 66 8,570,700,000 1,100,000 1,100,000 0 0
+100.00% (1100000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->100.00% (1100000B) 0x80483F7: main (long-time.c:13)
|
->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 70 9,257,900,000 1,900,000 1,900,000 0 0
- 71 9,360,000,000 0 0 0 0
- 72 9,462,200,000 0 0 0 0
- 73 9,565,000,000 1,200,000 1,200,000 0 0
- 74 9,667,900,000 2,300,000 2,300,000 0 0
- 75 9,769,900,000 1,900,000 1,900,000 0 0
- 76 9,872,000,000 0 0 0 0
- 77 9,974,200,000 0 0 0 0
- 78 10,077,000,000 1,200,000 1,200,000 0 0
- 79 10,179,900,000 2,300,000 2,300,000 0 0
-100.00% (2300000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->52.17% (1200000B) 0x8048418: main (long-time.c:15)
+ 67 8,696,800,000 800,000 800,000 0 0
+ 68 8,823,100,000 900,000 900,000 0 0
+ 69 8,949,000,000 1,200,000 1,200,000 0 0
+ 70 9,074,700,000 1,100,000 1,100,000 0 0
+ 71 9,200,800,000 800,000 800,000 0 0
+ 72 9,327,100,000 900,000 900,000 0 0
+ 73 9,453,000,000 1,200,000 1,200,000 0 0
+ 74 9,578,700,000 1,100,000 1,100,000 0 0
+ 75 9,704,800,000 800,000 800,000 0 0
+ 76 9,831,100,000 900,000 900,000 0 0
+100.00% (900000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->100.00% (900000B) 0x8048447: main (long-time.c:18)
|
-->47.83% (1100000B) 0x80483F7: main (long-time.c:13)
-|
->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 80 10,281,900,000 1,900,000 1,900,000 0 0
- 81 10,384,000,000 0 0 0 0
- 82 10,486,200,000 0 0 0 0
- 83 10,589,000,000 1,200,000 1,200,000 0 0
- 84 10,691,900,000 2,300,000 2,300,000 0 0
- 85 10,793,900,000 1,900,000 1,900,000 0 0
- 86 10,896,000,000 0 0 0 0
- 87 10,998,200,000 0 0 0 0
- 88 11,101,000,000 1,200,000 1,200,000 0 0
- 89 11,203,900,000 2,300,000 2,300,000 0 0
-100.00% (2300000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
-->52.17% (1200000B) 0x8048418: main (long-time.c:15)
+ 77 9,957,000,000 1,200,000 1,200,000 0 0
+ 78 10,082,700,000 1,100,000 1,100,000 0 0
+ 79 10,208,800,000 800,000 800,000 0 0
+ 80 10,335,100,000 900,000 900,000 0 0
+ 81 10,461,000,000 1,200,000 1,200,000 0 0
+ 82 10,586,700,000 1,100,000 1,100,000 0 0
+ 83 10,712,800,000 800,000 800,000 0 0
+ 84 10,839,100,000 900,000 900,000 0 0
+ 85 10,965,000,000 1,200,000 1,200,000 0 0
+ 86 11,090,700,000 1,100,000 1,100,000 0 0
+100.00% (1100000B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->100.00% (1100000B) 0x80483F7: main (long-time.c:13)
|
-->47.83% (1100000B) 0x80483F7: main (long-time.c:13)
-|
->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
--------------------------------------------------------------------------------
- 90 11,305,900,000 1,900,000 1,900,000 0 0
- 91 11,408,000,000 0 0 0 0
- 92 11,510,200,000 0 0 0 0
- 93 11,613,000,000 1,200,000 1,200,000 0 0
- 94 11,715,900,000 2,300,000 2,300,000 0 0
- 95 11,817,900,000 1,900,000 1,900,000 0 0
- 96 11,920,000,000 0 0 0 0
+ 87 11,216,800,000 800,000 800,000 0 0
+ 88 11,343,100,000 900,000 900,000 0 0
+ 89 11,469,000,000 1,200,000 1,200,000 0 0
+ 90 11,594,700,000 1,100,000 1,100,000 0 0
+ 91 11,720,800,000 800,000 800,000 0 0
+ 92 11,847,100,000 900,000 900,000 0 0
+ 93 11,973,000,000 1,200,000 1,200,000 0 0
Modified: branches/MASSIF2/massif/tests/one.c
===================================================================
--- branches/MASSIF2/massif/tests/one.c 2007-10-08 05:47:19 UTC (rev 6962)
+++ branches/MASSIF2/massif/tests/one.c 2007-10-08 06:39:48 UTC (rev 6963)
@@ -1,7 +1,6 @@
#include <stdlib.h>
-// Allocate some memory and then deallocate it, to get a nice up-then-down
-// graph.
+// A test for a single allocation.
int main(void)
{
Added: branches/MASSIF2/massif/tests/peak.c
===================================================================
--- branches/MASSIF2/massif/tests/peak.c (rev 0)
+++ branches/MASSIF2/massif/tests/peak.c 2007-10-08 06:39:48 UTC (rev 6963)
@@ -0,0 +1,13 @@
+#include <stdlib.h>
+
+int main(void)
+{
+ int i;
+ for (i = 0; i < 20; i++) {
+ int* p;
+ p = malloc(100);
+ p = malloc(100);
+ free(p);
+ }
+ return 0;
+}
Added: branches/MASSIF2/massif/tests/peak.post.exp
===================================================================
--- branches/MASSIF2/massif/tests/peak.post.exp (rev 0)
+++ branches/MASSIF2/massif/tests/peak.post.exp 2007-10-08 06:39:48 UTC (rev 6963)
@@ -0,0 +1,277 @@
+--------------------------------------------------------------------------------
+Command: ./peak
+Massif arguments: --stacks=no --time-unit=B
+ms_print arguments: massif.out
+--------------------------------------------------------------------------------
+
+
+ KB
+2.215^ #
+ | @ :#:
+ | @ : @::#:
+ | @ :@:: @::#:
+ | @ :@ ::@:: @::#:
+ | @ :@::@ ::@:: @::#:
+ | @ :@: :@::@ ::@:: @::#:
+ | @ : @::@: :@::@ ::@:: @::#:
+ | @ :@:: @::@: :@::@ ::@:: @::#:
+ | @ :@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@. :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . . @.:@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@.: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@ .:@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@.:@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@. :@::@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . . @.:@: :@::@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@.: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | . .@ .:@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ | .@.:@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::@: :@::@ ::@:: @::#:
+ 0 +--@--@---@---@--@---@--@---@---@--@---@--@---@---@--@---@--@---@---@--#>KB
+ 0 6.328
+
+Number of snapshots: 81
+ Detailed snapshots: [3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79 (peak)]
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 0 0 0 0 0 0
+ 1 108 108 100 8 0
+ 2 216 216 200 16 0
+ 3 216 216 200 16 0
+92.59% (200B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->46.30% (100B) 0x80483DE: main (peak.c:8)
+|
+->46.30% (100B) 0x80483EE: main (peak.c:9)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 4 324 108 100 8 0
+ 5 432 216 200 16 0
+ 6 540 324 300 24 0
+ 7 540 324 300 24 0
+92.59% (300B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->61.73% (200B) 0x80483DE: main (peak.c:8)
+|
+->30.86% (100B) 0x80483EE: main (peak.c:9)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 8 648 216 200 16 0
+ 9 756 324 300 24 0
+ 10 864 432 400 32 0
+ 11 864 432 400 32 0
+92.59% (400B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->69.44% (300B) 0x80483DE: main (peak.c:8)
+|
+->23.15% (100B) 0x80483EE: main (peak.c:9)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 12 972 324 300 24 0
+ 13 1,080 432 400 32 0
+ 14 1,188 540 500 40 0
+ 15 1,188 540 500 40 0
+92.59% (500B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->74.07% (400B) 0x80483DE: main (peak.c:8)
+|
+->18.52% (100B) 0x80483EE: main (peak.c:9)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 16 1,296 432 400 32 0
+ 17 1,404 540 500 40 0
+ 18 1,512 648 600 48 0
+ 19 1,512 648 600 48 0
+92.59% (600B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
+->77.16% (500B) 0x80483DE: main (peak.c:8)
+|
+->15.43% (100B) 0x80483EE: main (peak.c:9)
+
+--------------------------------------------------------------------------------
+ n time(B) total(B) useful-heap(B) admin-heap(B) stacks(B)
+--------------------------------------------------------------------------------
+ 20 1,620 540 500 40 0
+ 21 1,728 648 600 48 0
+ 22 1,836 756 700 56 0
+ 23 1...
[truncated message content] |