summaryrefslogtreecommitdiff
path: root/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test.html
blob: 2545fc07d1f3fd6abf07a217c4c4c5c6c12e437d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
<title>Priority Queue Text Pop Memory Use Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
</head>
<body>
<div id="page">
<h1>Priority Queue Text <tt>pop</tt> Memory Use Test</h1>
<h2><a name="description" id="description">Description</a></h2>
<p>This test inserts a number of values with keys from an
    arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
    a container, then pops them until only one is left in the
    container. It measures the memory use as a function of the
    number of values pushed to the container.</p>
<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc"><tt>priority_queue_text_pop_mem_usage_test</tt></a>
    thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
<h2><a name="purpose" id="purpose">Purpose</a></h2>
<p>The test checks the effect of different underlying
    data structures (see <a href="pq_design.html#pq_imp">Design::Priority
    Queues::Implementations</a>).</p>
<h2><a name="results" id="results">Results</a></h2>
<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
    <a href="#NPL">NPL</a> show the results for the native priority
    queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
    <a href="pq_performance_tests.html#local"><u>local</u></a>,
    respectively.</p>
<div id="NPG_res_div">
<div id="NPG_gcc">
<div id="NPG_priority_queue_text_pop_mem_usage_test">
<div id="NPG_pq">
<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_pop_mem_usage_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
<ol>
<li>
n_pq_vector-
<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
<li>
n_pq_deque-
<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
<li>
binary_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
</li>
<li>
thin_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
</li>
<li>
binomial_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
</li>
<li>
rc_binomial_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
</li>
<li>
pairing_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
</li>
</ol>
</div><div style="width: 100%; height: 20px"></div></div>
</div>
</div>
</div>
</div>
<div id="NPM_res_div">
<div id="NPM_msvc">
<div id="NPM_priority_queue_text_pop_mem_usage_test">
<div id="NPM_pq">
<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_pop_mem_usage_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
<ol>
<li>
n_pq_vector-
<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
<li>
n_pq_deque-
<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
<li>
binary_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
</li>
<li>
thin_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
</li>
<li>
binomial_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
</li>
<li>
rc_binomial_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
</li>
<li>
pairing_heap-
<a href="priority_queue.html"><tt>priority_queue</tt></a>
 with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
</li>
</ol>
</div><div style="width: 100%; height: 20px"></div></div>
</div>
</div>
</div>
</div>
<div id="NPL_res_div">
<div id="NPL_local">
<div id="NPL_priority_queue_text_pop_mem_usage_test">
<div id="NPL_pq">
<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_pop_mem_usage_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
</div>
</div>
</div>
</div>
<h2><a name="observations" id="observations">Observations</a></h2>
<p>The priority queue implementations (excluding the STL's) use
    memory proportionally to the number of values they hold:
    node-based implementations (<i>e.g.</i>, a pairing heap) do so
    naturally; <tt>pb_ds</tt>'s binary heap de-allocates memory when
    a certain lower threshold is exceeded.</p>
<p>Note from <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
    Text <tt>push</tt> and <tt>pop</tt> Timing Test</a> and
    <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
    Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
    Test</a> that this does not impede performance compared to the
    STL's priority queues.</p>
<p>(See <a href="hash_random_int_erase_mem_usage_test.html">Hash-Based Erase
    Memory Use Test</a> for a similar phenomenon regarding priority
    queues.)</p>
</div>
</body>
</html>