<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[a5] Memory Management -Bitmaps</title>
		<link>http://www.allegro.cc/forums/view/607095</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 23 Apr 2011 17:45:51 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So I&#39;ve recently created a game that uses bitmaps and sound clips(from ogg files).</p><p>However, My program hemorrhages memory. I&#39;ve been using a 1280x720 standard, and for simplicity&#39;s sake I&#39;ve made a couple screens full screen to render the static back ground once.</p><p>I used some of the examples&#39; models on  loading a bit map to memory and then loading it as a allegro_bitmap.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>    membitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"images/bg.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>membitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>       abort_example<span class="k2">(</span><span class="s">"bg.png not found or failed to load\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    <span class="k2">}</span>
<span class="number">  6</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    bg <span class="k3">=</span><a href="http://www.allegro.cc/manual/al_clone_bitmap"><span class="a">al_clone_bitmap</span></a><span class="k2">(</span>membitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>membitmap<span class="k2">)</span><span class="k2">;</span>
</div></div><p>


I included the destroy_bitmap(membitmap) and seemed to have the same speed and less use of resources.</p><p>1.  Now as a rule of thumb would I want to destroy the bitmap as soon as I done using it? (in the case above I destroy mimbitmap when it&#39;s cloned into the bg ALLEGRO_BITMAP .... then after I display the bg I destroy it as well )</p><p>2.  If I have several objects to animate would it be better to animate the sequence and destroy upon completion, or is it better to have implemented a use and lose type structure (purge non-needed memory ASAP)</p><p>3. I currently use ALLEGRO_BITMAP. Is the only memory management needed the al_destroy_bitmap() function?</p><p>4.  When using a loading bitmap would I destroy it after each call, or wait until its use is finished?</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>    membitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"images/bg.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>membitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>       abort_example<span class="k2">(</span><span class="s">"bg.png not found or failed to load\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    <span class="k2">}</span>
<span class="number">  6</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    bg <span class="k3">=</span><a href="http://www.allegro.cc/manual/al_clone_bitmap"><span class="a">al_clone_bitmap</span></a><span class="k2">(</span>membitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>membitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    membitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"images/bg2.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>membitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>       abort_example<span class="k2">(</span><span class="s">"bg.png not found or failed to load\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k2">}</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    bg2 <span class="k3">=</span><a href="http://www.allegro.cc/manual/al_clone_bitmap"><span class="a">al_clone_bitmap</span></a><span class="k2">(</span>membitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>membitmap<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Hopefully I can understand this issue, so I stop using 500MBs of ram to play a simple game...</p><p>Thanks in Advance!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Phrasz)</author>
		<pubDate>Sat, 23 Apr 2011 07:41:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607095/914218#target">Phrasz</a> said:</div><div class="quote"><p>
However, My program hemorrhages memory. 
</p></div></div><p>
How do you know this? Task Manager? Windows won&#39;t deallocate memory from your program unless it&#39;s needed somewhere else, that way it can re-use the same memory pages without constantly reallocating them.</p><p>You do know that you can load bitmaps directly to video memory right? Or is there some other reason you load them as memory bitmaps and then clone them into video bitmaps?</p><p>If you know you&#39;re not going to use a bitmap anymore, then it makes sense to free it.</p><div class="quote_container"><div class="title">Phrasz said:</div><div class="quote"><p>
I currently use ALLEGRO_BITMAP. Is the only memory management needed the al_destroy_bitmap() function?
</p></div></div><p>
Pretty much, yes.</p><div class="quote_container"><div class="title">Phrasz said:</div><div class="quote"><p>
When using a loading bitmap would I destroy it after each call, or wait until its use is finished?
</p></div></div><p>
I would wait until I was done using. Why load once for every time you use it unless this is done infrequently?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 23 Apr 2011 08:24:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In answer to your first question: Yes. I&#39;d pull up task manager and watch the memory use. Most of the code was fine, but some other parts would not destroy the memory properly, so when I&#39;d keep changing options (showing the main menu vs the options screen) I&#39;d see the memory keep rising.</p><p>As far as loading the bitmaps directly to video memory I figured I could, and believed I did this in old 4.2 days, but I just followed the example programs included with the source.</p><p>Finally, I&#39;m glad to hear it&#39;s just the destroy bitmap function... I&#39;m justing going to review my code to ensure it creates and destroys the bitmaps the most efficient way. (The current idea is create the bitmaps when entering the new case, in a switch/case, and destroy the memory usage before exiting the case.)</p><p>Thanks again!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Phrasz)</author>
		<pubDate>Sat, 23 Apr 2011 17:45:51 +0000</pubDate>
	</item>
</rss>
