source: OGRE/trunk/ogrenew/Docs/api/html/OgreMemoryManager_8h-source.html @ 657

Revision 657, 23.1 KB checked in by mattausch, 18 years ago (diff)

added ogre dependencies and patched ogre sources

Line 
1<html>
2<head>
3<title>OgreMemoryManager.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4<link type="text/css" rel="stylesheet" href="style.css">
5</head>
6
7<body>
8<!-- Generated by Doxygen 1.3.6 -->
9<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
10<h1>OgreMemoryManager.h</h1><a href="OgreMemoryManager_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span>
1100002 <span class="comment">-----------------------------------------------------------------------------</span>
1200003 <span class="comment">This source file is part of OGRE</span>
1300004 <span class="comment">(Object-oriented Graphics Rendering Engine)</span>
1400005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span>
1500006 <span class="comment"></span>
1600007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span>
1700008 <span class="comment">Also see acknowledgements in Readme.html</span>
1800009 <span class="comment"></span>
1900010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span>
2000011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span>
2100012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span>
2200013 <span class="comment">version.</span>
2300014 <span class="comment"></span>
2400015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span>
2500016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
2600017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span>
2700018 <span class="comment"></span>
2800019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span>
2900020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span>
3000021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span>
3100022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span>
3200023 <span class="comment">-----------------------------------------------------------------------------</span>
3300024 <span class="comment">*/</span>
3400025 <span class="comment">//---- ORIGINAL COPYRIGHT FOLLOWS -------------------------------------------</span>
3500026 <span class="comment">// ---------------------------------------------------------------------------------------------------------------------------------</span>
3600027 <span class="comment">// Copyright 2000, Paul Nettle. All rights reserved.</span>
3700028 <span class="comment">//</span>
3800029 <span class="comment">// You are free to use this source code in any commercial or non-commercial product.</span>
3900030 <span class="comment">//</span>
4000031 <span class="comment">// mmgr.cpp - Memory manager &amp; tracking software</span>
4100032 <span class="comment">//</span>
4200033 <span class="comment">// The most recent version of this software can be found at: ftp://ftp.GraphicsPapers.com/pub/ProgrammingTools/MemoryManagers/</span>
4300034 <span class="comment">//</span>
4400035 <span class="comment">// [NOTE: Best when viewed with 8-character tabs]</span>
4500036 <span class="comment">//</span>
4600037 <span class="comment">// ---------------------------------------------------------------------------------------------------------------------------------</span>
4700038 <span class="preprocessor">#ifndef __MemoryManager_H__</span>
4800039 <span class="preprocessor"></span><span class="preprocessor">#define __MemoryManager_H__</span>
4900040 <span class="preprocessor"></span>
5000041 <span class="preprocessor">#include "<a class="code" href="OgrePlatform_8h.html">OgrePlatform.h</a>"</span>
5100042 <span class="preprocessor">#include "<a class="code" href="OgreStdHeaders_8h.html">OgreStdHeaders.h</a>"</span>
5200043
5300044 <span class="keyword">namespace </span>Ogre {
5400045
5500087 <span class="preprocessor">#if OGRE_DEBUG_MEMORY_MANAGER &amp;&amp; OGRE_DEBUG_MODE</span>
5600088 <span class="preprocessor"></span>
5700089 <span class="preprocessor">#ifndef __FUNCTION__</span>
5800090 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCTION__ "???"</span>
5900091 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
6000092 <span class="preprocessor"></span>
6100093 }
6200094
6300095 <span class="comment">//-----------------------------------------------------------------------------</span>
6400096 <span class="comment">// We have to declare the global new([])/delete([]) operators before declaring </span>
6500097 <span class="comment">// the Ogre::MemoryManager class since it lists them as friend functions</span>
6600098 <span class="keywordtype">void</span> *operator new(size_t reportedSize);
6700099 <span class="keywordtype">void</span> *operator new[](size_t reportedSize);
6800100 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span> *reportedAddress);
6900101 <span class="keywordtype">void</span> operator delete[](<span class="keywordtype">void</span> *reportedAddress);
7000102 <span class="comment">//-----------------------------------------------------------------------------</span>
7100103
7200104 <span class="keyword">namespace </span><a class="code" href="classOgre.html">Ogre</a> {
7300105
7400115     <span class="keyword">typedef</span> <span class="keyword">struct </span>tag_au
7500116     {
7600117         size_t actualSize;
7700118         size_t reportedSize;
7800119
7900120         <span class="keywordtype">void</span> *actualAddress;
8000121         <span class="keywordtype">void</span> *reportedAddress;
8100122
8200123         <span class="keywordtype">char</span> sourceFile[40];
8300124         <span class="keywordtype">char</span> sourceFunc[40];
8400125
8500126         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sourceLine;
8600127         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> allocationType;
8700128
8800129         <span class="keywordtype">bool</span> breakOnDealloc;
8900130         <span class="keywordtype">bool</span> breakOnRealloc;
9000131
9100132         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> allocationNumber;
9200133         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> processID;
9300134
9400135         <span class="keyword">struct </span><a class="code" href="classtag__au.html">tag_au</a> *next;
9500136         <span class="keyword">struct </span><a class="code" href="classtag__au.html">tag_au</a> *prev;
9600137     } sAllocUnit;
9700138
9800139     <span class="keyword">typedef</span> <span class="keyword">struct</span>
9900140 <span class="keyword">    </span>{
10000141         size_t totalReportedMemory;
10100142         size_t totalActualMemory;
10200143
10300144         size_t peakReportedMemory;
10400145         size_t peakActualMemory;
10500146
10600147         size_t accumulatedReportedMemory;
10700148         size_t accumulatedActualMemory;
10800149         size_t accumulatedAllocUnitCount;
10900150
11000151         size_t totalAllocUnitCount;
11100152         size_t peakAllocUnitCount;
11200153     } sMStats;
11300154     
11400155     <span class="keyword">enum</span>
11500156     {
11600157         m_alloc_unknown        = 0,
11700158         m_alloc_new            = 1,
11800159         m_alloc_new_array      = 2,
11900160         m_alloc_malloc         = 3,
12000161         m_alloc_calloc         = 4,
12100162         m_alloc_realloc        = 5,
12200163         m_alloc_delete         = 6,
12300164         m_alloc_delete_array   = 7,
12400165         m_alloc_free           = 8
12500166     };
12600167
12700170     <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a16">_OgreExport</a> MemoryManager
12800171     {
12900172         <span class="keyword">friend</span> <span class="keywordtype">void</span> * ::operator <span class="keyword">new</span>(size_t);
13000173         <span class="keyword">friend</span> <span class="keywordtype">void</span> * ::operator <span class="keyword">new</span>[](size_t);
13100174         <span class="keyword">friend</span> void ::operator delete(<span class="keywordtype">void</span>*);
13200175         <span class="keyword">friend</span> void ::operator delete[](<span class="keywordtype">void</span>*);
13300176
13400177     <span class="keyword">public</span>:
13500178         <span class="keyword">static</span> MemoryManager&amp; instance(<span class="keywordtype">void</span>);
13600179
13700180     <span class="keyword">private</span>:
13800182         <span class="keywordtype">unsigned</span> m_uProcessIDs;
13900184         <span class="keywordtype">bool</span> m_bDeinitTime;
14000185
14100186 <span class="preprocessor">#ifndef __BORLANDC__</span>
14200187 <span class="preprocessor"></span>    <span class="keyword">private</span>:
14300188 <span class="preprocessor">#else</span>
14400189 <span class="preprocessor"></span>    <span class="keyword">public</span>:
14500190 <span class="preprocessor">#endif</span>
14600191 <span class="preprocessor"></span>        <span class="comment">//-------------------------------------------------------------------------</span>
14700192         <span class="comment">// Wrappers for the new/delete functions        </span>
14800193         <span class="keywordtype">void</span> *op_new_sc( size_t reportedSize, <span class="keywordtype">unsigned</span> processID );
14900194         <span class="keywordtype">void</span> *op_new_vc( size_t reportedSize, <span class="keywordtype">unsigned</span> processID );
15000195
15100196         <span class="keywordtype">void</span> *op_new_sc( size_t reportedSize, <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFile, <span class="keywordtype">int</span> sourceLine, <span class="keywordtype">unsigned</span> processID );
15200197         <span class="keywordtype">void</span> *op_new_vc( size_t reportedSize, <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFile, <span class="keywordtype">int</span> sourceLine, <span class="keywordtype">unsigned</span> processID );
15300198
15400199         <span class="keywordtype">void</span> op_del_sc( <span class="keywordtype">void</span> *reportedAddress, <span class="keywordtype">unsigned</span> processID );
15500200         <span class="keywordtype">void</span> op_del_vc( <span class="keywordtype">void</span> *reportedAddress, <span class="keywordtype">unsigned</span> processID );
15600201         <span class="comment">//-------------------------------------------------------------------------</span>
15700202
15800217         <span class="keywordtype">unsigned</span> _getProcessID();
15900218
16000219     <span class="keyword">public</span>:
16100220         MemoryManager();
16200221         ~MemoryManager();
16300222
16400223         <span class="comment">//-------------------------------------------------------------------------</span>
16500224         <span class="comment">// Used by the macros     </span>
16600225         <span class="keywordtype">void</span> setOwner(<span class="keyword">const</span> <span class="keywordtype">char</span> *file, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span> *func);
16700226         <span class="comment">//-------------------------------------------------------------------------</span>
16800227
16900228         <span class="comment">//-------------------------------------------------------------------------</span>
17000229         <span class="comment">// Allocation breakpoints        </span>
17100230         <span class="keywordtype">bool</span> &amp;breakOnRealloc(<span class="keywordtype">void</span> *reportedAddress);
17200231         <span class="keywordtype">bool</span> &amp;breakOnDealloc( <span class="keywordtype">void</span> *reportedAddress );
17300232         <span class="keywordtype">void</span> breakOnAlloc( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count );
17400233         <span class="comment">//-------------------------------------------------------------------------</span>
17500234
17600235         <span class="comment">//-------------------------------------------------------------------------</span>
17700236         <span class="comment">// The meat &amp; potatoes of the memory tracking software</span>
17800237
17900250         <span class="keywordtype">void</span> * allocMem(
18000251             <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFile,
18100252             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sourceLine,
18200253             <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFunc,
18300254             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> allocationType,
18400255             <span class="keyword">const</span> size_t reportedSize,
18500256             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> processID );
18600257
18700273         <span class="keywordtype">void</span> * rllocMem(
18800274             <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFile,
18900275             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sourceLine,
19000276             <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFunc,
19100277             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> reallocationType,
19200278             <span class="keyword">const</span> size_t reportedSize,
19300279             <span class="keywordtype">void</span> *reportedAddress,
19400280             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> processID );
19500281
19600304         <span class="keywordtype">void</span> dllocMem(
19700305             <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFile,
19800306             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sourceLine,
19900307             <span class="keyword">const</span> <span class="keywordtype">char</span> *sourceFunc,
20000308             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> deallocationType,
20100309             <span class="keyword">const</span> <span class="keywordtype">void</span> *reportedAddress,
20200310             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> processID );
20300311         <span class="comment">//-------------------------------------------------------------------------</span>
20400312
20500313         <span class="comment">//-------------------------------------------------------------------------</span>
20600314         <span class="comment">// Utilitarian functions        </span>
20700315         <span class="keywordtype">bool</span> validateAddr(<span class="keyword">const</span> <span class="keywordtype">void</span> *reportedAddress);
20800316         <span class="keywordtype">bool</span> validateAlloc(<span class="keyword">const</span> sAllocUnit *allocUnit);
20900317         <span class="keywordtype">bool</span> validateAllAllocs();
21000318         <span class="comment">//-------------------------------------------------------------------------</span>
21100319
21200320         <span class="comment">//-------------------------------------------------------------------------</span>
21300321         <span class="comment">// Unused RAM calculations        </span>
21400322         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> calcUnused( <span class="keyword">const</span> sAllocUnit *allocUnit );
21500323         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> calcAllUnused();
21600324         <span class="comment">//-------------------------------------------------------------------------</span>
21700325
21800326         <span class="comment">//-------------------------------------------------------------------------</span>
21900327         <span class="comment">// Logging and reporting        </span>
22000328         <span class="keywordtype">void</span> dumpAllocUnit( <span class="keyword">const</span> sAllocUnit *allocUnit, <span class="keyword">const</span> <span class="keywordtype">char</span> *prefix = <span class="stringliteral">""</span> );
22100329         <span class="keywordtype">void</span> dumpMemReport( <span class="keyword">const</span> <span class="keywordtype">char</span> *filename = <span class="stringliteral">"memreport.log"</span>, <span class="keyword">const</span> <span class="keywordtype">bool</span> overwrite = <span class="keyword">true</span> );
22200330         sMStats getMemStats();           
22300331         <span class="comment">//-------------------------------------------------------------------------        </span>
22400332     };
22500333 }
22600334
22700341 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> gProcessID = 0;
22800342
22900343 <span class="comment">//-----------------------------------------------------------------------------</span>
23000344 <span class="comment">// Overridden global new([])/delete([]) functions</span>
23100345 <span class="comment">//</span>
23200346 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new(size_t reportedSize)
23300347 {
23400348     <span class="keywordflow">if</span>( !gProcessID )
23500349         gProcessID = <a class="code" href="classOgre_1_1MemoryManager.html#Ogre_1_1MemoryManagere0">Ogre::MemoryManager::instance</a>()._getProcessID();
23600350     <span class="keywordflow">return</span> <a class="code" href="classOgre_1_1MemoryManager.html#Ogre_1_1MemoryManagere0">Ogre::MemoryManager::instance</a>().op_new_sc( reportedSize, gProcessID );
23700351 }
23800352 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new[](size_t reportedSize)
23900353 {
24000354     <span class="keywordflow">if</span>( !gProcessID )
24100355         gProcessID = <a class="code" href="classOgre_1_1MemoryManager.html#Ogre_1_1MemoryManagere0">Ogre::MemoryManager::instance</a>()._getProcessID();
24200356     <span class="keywordflow">return</span> <a class="code" href="classOgre_1_1MemoryManager.html#Ogre_1_1MemoryManagere0">Ogre::MemoryManager::instance</a>().op_new_vc( reportedSize, gProcessID );
24300357 }
24400358
24500359 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span> *reportedAddress)
24600360 {
24700361     <a class="code" href="classOgre_1_1MemoryManager.html#Ogre_1_1MemoryManagere0">Ogre::MemoryManager::instance</a>().op_del_sc( reportedAddress, gProcessID );   
24800362 }
24900363 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete[](<span class="keywordtype">void</span> *reportedAddress)
25000364 {
25100365     <a class="code" href="classOgre_1_1MemoryManager.html#Ogre_1_1MemoryManagere0">Ogre::MemoryManager::instance</a>().op_del_vc( reportedAddress, gProcessID );
25200366 }
25300367 <span class="comment">//-----------------------------------------------------------------------------</span>
25400368
25500369 <span class="comment">//-----------------------------------------------------------------------------</span>
25600370 <span class="comment">// This header adds the *alloc/free macros, wrapping the C functions</span>
25700371 <span class="preprocessor">#include "<a class="code" href="OgreMemoryMacros_8h.html">OgreMemoryMacros.h</a>"</span>
25800372 <span class="comment">//-----------------------------------------------------------------------------</span>
25900373
26000374 <span class="preprocessor">#else</span>
26100375 <span class="preprocessor"></span>
262<a name="l00378"></a><a class="code" href="classOgre_1_1MemoryManager.html">00378</a>     <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> MemoryManager
26300379     {
26400380     <span class="keyword">public</span>:
26500381         <span class="keyword">static</span> MemoryManager&amp; instance(<span class="keywordtype">void</span>);
26600382
26700383         MemoryManager();
26800384         ~MemoryManager();
26900385
27000388         <span class="keywordtype">void</span> *allocMem( <span class="keyword">const</span> <span class="keywordtype">char</span> *szFile, size_t uLine, size_t count ) <span class="keywordflow">throw</span> ( );
27100389
27200392         <span class="keywordtype">void</span> *rllocMem( <span class="keyword">const</span> <span class="keywordtype">char</span> *szFile, size_t uLine, <span class="keywordtype">void</span> *ptr , size_t count ) <span class="keywordflow">throw</span> ( );
27300393
27400396         <span class="keywordtype">void</span> *cllocMem( <span class="keyword">const</span> <span class="keywordtype">char</span> *szFile, size_t uLine, size_t num, size_t size ) <span class="keywordflow">throw</span> ( );
27500397
27600400         <span class="keywordtype">void</span> dllocMem( <span class="keyword">const</span> <span class="keywordtype">char</span> *szFile, size_t uLine, <span class="keywordtype">void</span> *ptr ) <span class="keywordflow">throw</span> ( );
27700401     };
27800402
27900403 }
28000404
28100405 <span class="preprocessor">#endif</span>
28200406 <span class="preprocessor"></span>
28300407 <span class="preprocessor">#endif</span>
28400408 <span class="preprocessor"></span>
285</pre></div><hr>
286<p>
287Copyright &copy; 2000-2005 by The OGRE Team<br />
288<!--Creative Commons License--><a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/"><img alt="Creative Commons License" border="0" src="http://creativecommons.org/images/public/somerights20.png"/></a><br/>
289This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License</a>.<br/>
290                <!--/Creative Commons License--><!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
291                <Work rdf:about="">
292                        <license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/" />
293        <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" />
294                </Work>
295                <License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"><permits rdf:resource="http://web.resource.org/cc/Reproduction"/><permits rdf:resource="http://web.resource.org/cc/Distribution"/><requires rdf:resource="http://web.resource.org/cc/Notice"/><requires rdf:resource="http://web.resource.org/cc/Attribution"/><permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/><requires rdf:resource="http://web.resource.org/cc/ShareAlike"/></License></rdf:RDF> -->
296
297Last modified Sun Feb 12 12:59:47 2006
298</p>
299</body>
300</html>
Note: See TracBrowser for help on using the repository browser.