Update to version 2.33.1
[profile/ivi/glib2.git] / docs / reference / glib / html / glib-Memory-Slices.html
index 3de681f..30ff0fb 100644 (file)
@@ -73,7 +73,7 @@ memory-waste, scalability and performance problems.
 <p>
 To achieve these goals, the slice allocator uses a sophisticated,
 layered design that has been inspired by Bonwick's slab allocator
-<sup>[<a name="id569578" href="#ftn.id569578" class="footnote">1</a>]</sup>.
+<sup>[<a name="idp8623840" href="#ftn.idp8623840" class="footnote">1</a>]</sup>.
 It uses <code class="function">posix_memalign()</code> to optimize allocations of many equally-sized
 chunks, and has per-thread free lists (the so-called magazine layer)
 to quickly satisfy allocation requests of already known structure sizes.
@@ -96,98 +96,51 @@ object size used at allocation time is still available when freeing.
 <p>
 </p>
 <div class="example">
-<a name="id610691"></a><p class="title"><b>Example 8. Using the slice allocator</b></p>
-<div class="example-contents">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">mem</span><span class="symbol">[</span><span class="number">10000</span><span class="symbol">];</span>
-<span class="usertype">gint</span><span class="normal"> i</span><span class="symbol">;</span>
+<a name="idp6851744"></a><p class="title"><b>Example 8. Using the slice allocator</b></p>
+<div class="example-contents"><pre class="programlisting">
+gchar *mem[10000];
+gint i;
 
-<span class="comment">/* Allocate 10000 blocks. */</span>
-<span class="keyword">for</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">i </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span><span class="normal"> i </span><span class="symbol">&lt;</span><span class="normal"> </span><span class="number">10000</span><span class="symbol">;</span><span class="normal"> i</span><span class="symbol">++)</span>
-<span class="normal">  </span><span class="cbracket">{</span>
-<span class="normal">    mem</span><span class="symbol">[</span><span class="normal">i</span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Memory-Slices.html#g-slice-alloc">g_slice_alloc</a></span><span class="normal"> </span><span class="symbol">(</span><span class="number">50</span><span class="symbol">);</span>
+/* Allocate 10000 blocks. */
+for (i = 0; i &lt; 10000; i++)
+  {
+    mem[i] = g_slice_alloc (50);
 
-<span class="normal">    </span><span class="comment">/* Fill in the memory with some junk. */</span>
-<span class="normal">    </span><span class="keyword">for</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">j </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span><span class="normal"> j </span><span class="symbol">&lt;</span><span class="normal"> </span><span class="number">50</span><span class="symbol">;</span><span class="normal"> j</span><span class="symbol">++)</span>
-<span class="normal">      mem</span><span class="symbol">[</span><span class="normal">i</span><span class="symbol">][</span><span class="normal">j</span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">=</span><span class="normal"> i </span><span class="symbol">*</span><span class="normal"> j</span><span class="symbol">;</span>
-<span class="normal">  </span><span class="cbracket">}</span>
-
-<span class="comment">/* Now free all of the blocks. */</span>
-<span class="keyword">for</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">i </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span><span class="normal"> i </span><span class="symbol">&lt;</span><span class="normal"> </span><span class="number">10000</span><span class="symbol">;</span><span class="normal"> i</span><span class="symbol">++)</span>
-<span class="normal">  </span><span class="cbracket">{</span>
-<span class="normal">    </span><span class="function"><a href="glib-Memory-Slices.html#g-slice-free1">g_slice_free1</a></span><span class="normal"> </span><span class="symbol">(</span><span class="number">50</span><span class="symbol">,</span><span class="normal"> mem</span><span class="symbol">[</span><span class="normal">i</span><span class="symbol">]);</span>
-<span class="normal">  </span><span class="cbracket">}</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
+    /* Fill in the memory with some junk. */
+    for (j = 0; j &lt; 50; j++)
+      mem[i][j] = i * j;
+  }
 
+/* Now free all of the blocks. */
+for (i = 0; i &lt; 10000; i++)
+  {
+    g_slice_free1 (50, mem[i]);
+  }
+</pre></div>
 </div>
 <p><br class="example-break">
 </p>
 <p>
 </p>
 <div class="example">
-<a name="id546533"></a><p class="title"><b>Example 9. Using the slice allocator with data structures</b></p>
-<div class="example-contents">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="usertype">GRealArray</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">array</span><span class="symbol">;</span>
+<a name="idp10478048"></a><p class="title"><b>Example 9. Using the slice allocator with data structures</b></p>
+<div class="example-contents"><pre class="programlisting">
+GRealArray *array;
 
-<span class="comment">/* Allocate one block, using the g_slice_new() macro. */</span>
-<span class="normal">array </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Memory-Slices.html#g-slice-new">g_slice_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GRealArray</span><span class="symbol">);</span>
+/* Allocate one block, using the g_slice_new() macro. */
+array = g_slice_new (GRealArray);
 
-<span class="comment">/* We can now use array just like a normal pointer to a structure. */</span>
-<span class="normal">array</span><span class="symbol">-&gt;</span><span class="normal">data            </span><span class="symbol">=</span><span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
-<span class="normal">array</span><span class="symbol">-&gt;</span><span class="normal">len             </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="normal">array</span><span class="symbol">-&gt;</span><span class="normal">alloc           </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="normal">array</span><span class="symbol">-&gt;</span><span class="normal">zero_terminated </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">zero_terminated </span><span class="symbol">?</span><span class="normal"> </span><span class="number">1</span><span class="normal"> </span><span class="symbol">:</span><span class="normal"> </span><span class="number">0</span><span class="symbol">);</span>
-<span class="normal">array</span><span class="symbol">-&gt;</span><span class="normal">clear           </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">clear </span><span class="symbol">?</span><span class="normal"> </span><span class="number">1</span><span class="normal"> </span><span class="symbol">:</span><span class="normal"> </span><span class="number">0</span><span class="symbol">);</span>
-<span class="normal">array</span><span class="symbol">-&gt;</span><span class="normal">elt_size        </span><span class="symbol">=</span><span class="normal"> elt_size</span><span class="symbol">;</span>
-
-<span class="comment">/* We can free the block, so it can be reused. */</span>
-<span class="function"><a href="glib-Memory-Slices.html#g-slice-free">g_slice_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GRealArray</span><span class="symbol">,</span><span class="normal"> array</span><span class="symbol">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
+/* We can now use array just like a normal pointer to a structure. */
+array-&gt;data            = NULL;
+array-&gt;len             = 0;
+array-&gt;alloc           = 0;
+array-&gt;zero_terminated = (zero_terminated ? 1 : 0);
+array-&gt;clear           = (clear ? 1 : 0);
+array-&gt;elt_size        = elt_size;
 
+/* We can free the block, so it can be reused. */
+g_slice_free (GRealArray, array);
+</pre></div>
 </div>
 <p><br class="example-break">
 </p>
@@ -509,7 +462,7 @@ related debugging options.
 </div>
 <div class="footnotes">
 <br><hr width="100" align="left">
-<div class="footnote"><p><sup>[<a id="ftn.id569578" href="#id569578" class="para">1</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.idp8623840" href="#idp8623840" class="para">1</a>] </sup>
 <a class="ulink" href="http://citeseer.ist.psu.edu/bonwick94slab.html" target="_top">[Bonwick94]</a> Jeff Bonwick, The slab allocator: An object-caching kernel
 memory allocator. USENIX 1994, and
 <a class="ulink" href="http://citeseer.ist.psu.edu/bonwick01magazines.html" target="_top">[Bonwick01]</a> Bonwick and Jonathan Adams, Magazines and vmem: Extending the