<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Le controle de la memoire</title>
	<atom:link href="http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire/feed" rel="self" type="application/rss+xml" />
	<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire</link>
	<description>Des jeux video a la finance, a la creation d'entreprise</description>
	<pubDate>Sat, 04 Feb 2012 15:45:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-5973</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Sun, 02 Dec 2007 11:39:49 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-5973</guid>
		<description>Tiens je rebondis rapidement sur ce post.

Hier j'ai programme une petite application pour le GI que j'inclurai dans mon prochain SDK et qui permet de voir l'etat de la memoire en temps reel. Ca permet notamment de voir si la memoire fragmente  ou si y'a un usage intensif de la memoire qu'on ne suspectait pas.

J'ai d'ailleurs fait une petite video de Battle For Independence (mon projet actuel donc) afin de montrer comment ca marche.

http://gi.kamron.net/Videos/GIMemMonitor.zip

L'application qui permet de voir l'etat de la memoire est une application independente (qui marche grave au GIMemory) sur la droite du jeu.

Code de couleur:
Noir, c'est memoire intouchee
Rouge, c'est memoire allouee
Blue, c'est memoire desallouee

Si vous etes attentif (pas facile vue la qualitee de la compression), vous verrez que pendant le jeu y'a encore pas mal d'allocation/desallocation en continue. Va falloir que je repare ca.

PS: non aucun portage prevu :)</description>
		<content:encoded><![CDATA[<p>Tiens je rebondis rapidement sur ce post.</p>
<p>Hier j&#8217;ai programme une petite application pour le GI que j&#8217;inclurai dans mon prochain SDK et qui permet de voir l&#8217;etat de la memoire en temps reel. Ca permet notamment de voir si la memoire fragmente  ou si y&#8217;a un usage intensif de la memoire qu&#8217;on ne suspectait pas.</p>
<p>J&#8217;ai d&#8217;ailleurs fait une petite video de Battle For Independence (mon projet actuel donc) afin de montrer comment ca marche.</p>
<p><a href="http://gi.kamron.net/Videos/GIMemMonitor.zip" rel="nofollow">http://gi.kamron.net/Videos/GIMemMonitor.zip</a></p>
<p>L&#8217;application qui permet de voir l&#8217;etat de la memoire est une application independente (qui marche grave au GIMemory) sur la droite du jeu.</p>
<p>Code de couleur:<br />
Noir, c&#8217;est memoire intouchee<br />
Rouge, c&#8217;est memoire allouee<br />
Blue, c&#8217;est memoire desallouee</p>
<p>Si vous etes attentif (pas facile vue la qualitee de la compression), vous verrez que pendant le jeu y&#8217;a encore pas mal d&#8217;allocation/desallocation en continue. Va falloir que je repare ca.</p>
<p>PS: non aucun portage prevu <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Galdor</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-379</link>
		<dc:creator>Galdor</dc:creator>
		<pubDate>Sat, 09 Dec 2006 21:44:14 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-379</guid>
		<description>Je ne suis pas un pro, mais le genialissime valgrind (http://valgrind.org/) traque les leaks, les acces memoire invalides, et tout ce qui pourrit la vie des codeurs. Au passage, il fait aussi du profiling et tout plein d'autres choses...

Tant que j'y suis, je suppose qu'il n'y a pas de portage Linux/BSD de prevu ?</description>
		<content:encoded><![CDATA[<p>Je ne suis pas un pro, mais le genialissime valgrind (http://valgrind.org/) traque les leaks, les acces memoire invalides, et tout ce qui pourrit la vie des codeurs. Au passage, il fait aussi du profiling et tout plein d&#8217;autres choses&#8230;</p>
<p>Tant que j&#8217;y suis, je suppose qu&#8217;il n&#8217;y a pas de portage Linux/BSD de prevu ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-343</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Thu, 07 Dec 2006 09:10:24 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-343</guid>
		<description>Coucou Nickaru,

Ne confonds pas design et implementation. Un singleton c'est un objet qui n'a qu'une seule instance. La ce que tu discutes c'est la facon d'implementer ca. Donc tu peux pas dire "les singletons c'est mal car ca appelle ..." sans faire cette grosse confusion.

Ensuite pour ta classe template de laquelle on derrive ouais c'est en effet ce qu'on fait, mais rien n'empeche cette classe de reserver cette memoire avec ton allocateur plutot que celle systeme.

Pour le GI j'ai vire le forum, trop de spam et pas le temps de gerer ca, donc envoie un email si t'as un soucis particulier, mais je le dis tout de suite faut pas etre presse pour les reponses :) Plus la reponse demande du temps plus je risque de trainer les pieds pour repondre.

Merci aux abrutis de spammer de comprendre qu'on s'en branle de vos links a la con et que tout est modere ici donc y'a aucune chance que j'en laisse passer... Tout de meme 150 qui ont essayes deja... mais bon la je digresse</description>
		<content:encoded><![CDATA[<p>Coucou Nickaru,</p>
<p>Ne confonds pas design et implementation. Un singleton c&#8217;est un objet qui n&#8217;a qu&#8217;une seule instance. La ce que tu discutes c&#8217;est la facon d&#8217;implementer ca. Donc tu peux pas dire &#8220;les singletons c&#8217;est mal car ca appelle &#8230;&#8221; sans faire cette grosse confusion.</p>
<p>Ensuite pour ta classe template de laquelle on derrive ouais c&#8217;est en effet ce qu&#8217;on fait, mais rien n&#8217;empeche cette classe de reserver cette memoire avec ton allocateur plutot que celle systeme.</p>
<p>Pour le GI j&#8217;ai vire le forum, trop de spam et pas le temps de gerer ca, donc envoie un email si t&#8217;as un soucis particulier, mais je le dis tout de suite faut pas etre presse pour les reponses <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Plus la reponse demande du temps plus je risque de trainer les pieds pour repondre.</p>
<p>Merci aux abrutis de spammer de comprendre qu&#8217;on s&#8217;en branle de vos links a la con et que tout est modere ici donc y&#8217;a aucune chance que j&#8217;en laisse passer&#8230; Tout de meme 150 qui ont essayes deja&#8230; mais bon la je digresse</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nickaru</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-332</link>
		<dc:creator>Nickaru</dc:creator>
		<pubDate>Wed, 06 Dec 2006 18:33:05 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-332</guid>
		<description>Bonjour,

En fait je crois qu’on c’est pas compris sur ma méthode.
Pour les singletons je ne comprend pas vraiment leur utilité non plus (plus par manque d’expérience mais rien que le fait qu’on empile le pointer this a chaque appelle de méthode me trou le c** autant utiliser une classe statique si l’objet est unique), mais ça permet de déclarer une instance unique. C’est ainsi que je me suis dit plutôt que de déclarer une seule instance de ma classe autant en déclarer un pool de mémoire.
Le résultat est le template présenté plus haut.

Donc si j’ai une classe A en la déclarant ainsi :
Class A : public Cachable inf A, 1024 sup (inf et sup sont les signes off course)
Et donc A hérite automatiquement des opérateur new et delete du template et il possède son propre pool de mémoire.

Pour les exceptions, j’en génère (en mode debug :D) dans 2 cas quand le pool déclaré n’est pas suffisant (plus de 1024 instances de A pour l’exemple).  Et quand la taille demandé n’est pas égale à la taille du type du pool (cf. on a une classe B qui hérite de A sans surcharger son propre Cachable). Et si j'ai un gros pb il me suffit de virer l'héritage du template Cachable et hop c'est les new et delete normaux qui prend en charge la mémoire)

Mais je crois que je vais utiliser ta méthode pour les objets dont il est difficile d’être certain du nombre cf les nœud de A*, comme ça je suis certain que le bloc mémoire qui me reste est efficacement géré).

Pour GI c'est ou qu'on en parle?

nicolas</description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>En fait je crois qu’on c’est pas compris sur ma méthode.<br />
Pour les singletons je ne comprend pas vraiment leur utilité non plus (plus par manque d’expérience mais rien que le fait qu’on empile le pointer this a chaque appelle de méthode me trou le c** autant utiliser une classe statique si l’objet est unique), mais ça permet de déclarer une instance unique. C’est ainsi que je me suis dit plutôt que de déclarer une seule instance de ma classe autant en déclarer un pool de mémoire.<br />
Le résultat est le template présenté plus haut.</p>
<p>Donc si j’ai une classe A en la déclarant ainsi :<br />
Class A : public Cachable inf A, 1024 sup (inf et sup sont les signes off course)<br />
Et donc A hérite automatiquement des opérateur new et delete du template et il possède son propre pool de mémoire.</p>
<p>Pour les exceptions, j’en génère (en mode debug :D) dans 2 cas quand le pool déclaré n’est pas suffisant (plus de 1024 instances de A pour l’exemple).  Et quand la taille demandé n’est pas égale à la taille du type du pool (cf. on a une classe B qui hérite de A sans surcharger son propre Cachable). Et si j&#8217;ai un gros pb il me suffit de virer l&#8217;héritage du template Cachable et hop c&#8217;est les new et delete normaux qui prend en charge la mémoire)</p>
<p>Mais je crois que je vais utiliser ta méthode pour les objets dont il est difficile d’être certain du nombre cf les nœud de A*, comme ça je suis certain que le bloc mémoire qui me reste est efficacement géré).</p>
<p>Pour GI c&#8217;est ou qu&#8217;on en parle?</p>
<p>nicolas</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-329</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Wed, 06 Dec 2006 12:20:37 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-329</guid>
		<description>Salut ox et bienvenue ici.

Merci pour le compliment et ta remarque est tres juste a propos de pool de memoire que l'on utilise souvent lorsqu'on a beaucoup d'objets de meme taille (pas forcement en fonction de leur taille memoire).

En revanche je ne suis pas sur que tu aies lu l'article jusqu'au bout en ce qui concerne la surchage de global new et delete et notamment:

"Mais, pourquoi ne pas tout simplement overloader l’operateur global new et delete pour tout me direz vous"

Les macros permettent d'eviter d'avoir a ecrire deux lignes a chaque fois et de pouvoir changer la syntaxe sans avoir a changer le code si besoin etait.</description>
		<content:encoded><![CDATA[<p>Salut ox et bienvenue ici.</p>
<p>Merci pour le compliment et ta remarque est tres juste a propos de pool de memoire que l&#8217;on utilise souvent lorsqu&#8217;on a beaucoup d&#8217;objets de meme taille (pas forcement en fonction de leur taille memoire).</p>
<p>En revanche je ne suis pas sur que tu aies lu l&#8217;article jusqu&#8217;au bout en ce qui concerne la surchage de global new et delete et notamment:</p>
<p>&#8220;Mais, pourquoi ne pas tout simplement overloader l’operateur global new et delete pour tout me direz vous&#8221;</p>
<p>Les macros permettent d&#8217;eviter d&#8217;avoir a ecrire deux lignes a chaque fois et de pouvoir changer la syntaxe sans avoir a changer le code si besoin etait.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ox</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-327</link>
		<dc:creator>ox</dc:creator>
		<pubDate>Wed, 06 Dec 2006 12:13:20 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-327</guid>
		<description>Etonnant qu'un article sur la memoire (tres bon au prealable) ne parle pas de l'utilisation de mem pools pour les allocations de petite taille

Par contre je ne suis pas sur d'avoir compris l'interet des macros ?
pourquoi ne pas simplement surcharger new et delete, je me vois mal integrer un gestionnaire memoire dans un projet existant et devoir repasser sur tous les news du codebase et les remplacer par le define correspondant ! :)</description>
		<content:encoded><![CDATA[<p>Etonnant qu&#8217;un article sur la memoire (tres bon au prealable) ne parle pas de l&#8217;utilisation de mem pools pour les allocations de petite taille</p>
<p>Par contre je ne suis pas sur d&#8217;avoir compris l&#8217;interet des macros ?<br />
pourquoi ne pas simplement surcharger new et delete, je me vois mal integrer un gestionnaire memoire dans un projet existant et devoir repasser sur tous les news du codebase et les remplacer par le define correspondant ! <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-295</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Fri, 01 Dec 2006 13:28:35 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-295</guid>
		<description>Je me suis mal exprime :)

Oui faut pas melanger new/free et malloc/delete. Ce que je vouais dire c'est ca (exemple concret):
Tu crees operator new(int size, void* mem, int dummy).
Et bien dans ce cas, tu as interet a creer un operator delete(void* ptr, void* mem, int dummy). Pourquoi ? Si jamais une exception est lancee dans le constructeur (donc juste apres TON operator new), si le delete correspondant n'existe pas, la memoire ne sera pas liberee. Si ce delete "associe" existe, la memoire sera correctement liberee. C'est de ca que je voulais parler. Sinon si tout se passe bien, c'est toujours le delete "normal" qui est appele :)

Par rapport au template, j'ai egalement utilise la macro sur un int :) Et ca compile ! Donc si la ligne de template s'evanouit ;) Essaye tu verras ...

Non non tu peux continuer a rester a ce niveau ca ne me derange pas ^^</description>
		<content:encoded><![CDATA[<p>Je me suis mal exprime <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Oui faut pas melanger new/free et malloc/delete. Ce que je vouais dire c&#8217;est ca (exemple concret):<br />
Tu crees operator new(int size, void* mem, int dummy).<br />
Et bien dans ce cas, tu as interet a creer un operator delete(void* ptr, void* mem, int dummy). Pourquoi ? Si jamais une exception est lancee dans le constructeur (donc juste apres TON operator new), si le delete correspondant n&#8217;existe pas, la memoire ne sera pas liberee. Si ce delete &#8220;associe&#8221; existe, la memoire sera correctement liberee. C&#8217;est de ca que je voulais parler. Sinon si tout se passe bien, c&#8217;est toujours le delete &#8220;normal&#8221; qui est appele <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Par rapport au template, j&#8217;ai egalement utilise la macro sur un int <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Et ca compile ! Donc si la ligne de template s&#8217;evanouit <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Essaye tu verras &#8230;</p>
<p>Non non tu peux continuer a rester a ce niveau ca ne me derange pas ^^</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-294</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Fri, 01 Dec 2006 13:14:19 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-294</guid>
		<description>Salut Michael

"Par exemple, quand tu fais un operateur placement new, tu as interet a faire le delete “equivalent”"

Oui mais ca c'est normal, c'est ce que je disais dans le post, tu melanges pas new et free ou malloc et delete non plus.

Juste pour info le destructeur est automatically ajoutte lorsque tu as une class (ou meme une struct) et que tu compiles en C++.
Je doute que la ligne de la template d'evanouisse :)

Mais si ca pose probleme t'es pas oblige d'utiliser la macro non plus! Des fois j'alloue un bloque de memoire comme avec malloc, faut que j'utilise mon allocateur.

Promis, mon prochain topic en prog sera plus simple ;)</description>
		<content:encoded><![CDATA[<p>Salut Michael</p>
<p>&#8220;Par exemple, quand tu fais un operateur placement new, tu as interet a faire le delete “equivalent”&#8221;</p>
<p>Oui mais ca c&#8217;est normal, c&#8217;est ce que je disais dans le post, tu melanges pas new et free ou malloc et delete non plus.</p>
<p>Juste pour info le destructeur est automatically ajoutte lorsque tu as une class (ou meme une struct) et que tu compiles en C++.<br />
Je doute que la ligne de la template d&#8217;evanouisse <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Mais si ca pose probleme t&#8217;es pas oblige d&#8217;utiliser la macro non plus! Des fois j&#8217;alloue un bloque de memoire comme avec malloc, faut que j&#8217;utilise mon allocateur.</p>
<p>Promis, mon prochain topic en prog sera plus simple <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-293</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Fri, 01 Dec 2006 13:04:29 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-293</guid>
		<description>Bon alors la methode du template, j'y avais pense pour eliminer le besoin du nom de classe dans la macro de delete mais ca ne resolvait pas mon probleme. Mais la c'est trop fort :) Je resume...

Mon client ne voulait pas de macros differentes pour delete les types C primitifs (ou les classes sans destructeur mais ca c'est pas conseille) et les classes. Du coup j'avais fait un delete global, mais j'avais un probleme sur Symbian qui avait deja redefini le delete global, qui se trouve dans une lib et non une dll... Juste a cause de Symbian, j'allais etre a deux doigts de faire deriver toutes les classes (les miennes plus celles du client) d'une classe vide qui redefinissait juste l'operateur delete, avec toutes les merdes eventuelles (integrations d'autres libs, creation d'une classe derivant de deux classes differentes...).

Et la je me suis dit, je perds rien a essayer le coup du template... Et BINGO !!! Le compilo, quand il genere le code template, elimine tout seul comme un grand la ligne qui contient _pPointer-&#62;~T() si il s'agit d'un type primitif ou d'une classe sans destructeur :D Du coup plus besoin de creer de classe de base, ni d'avoir deux macros de delete differentes... Le bonheur... Teste sur compilos Microsoft et gcc.... Trop fort, je pars en week end heureux...
En revanche implementer l'appel des destructeurs dans le delete d'un tableau de classes, ca fait une macro absolument horrible !!!

Voili, voilou :)</description>
		<content:encoded><![CDATA[<p>Bon alors la methode du template, j&#8217;y avais pense pour eliminer le besoin du nom de classe dans la macro de delete mais ca ne resolvait pas mon probleme. Mais la c&#8217;est trop fort <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Je resume&#8230;</p>
<p>Mon client ne voulait pas de macros differentes pour delete les types C primitifs (ou les classes sans destructeur mais ca c&#8217;est pas conseille) et les classes. Du coup j&#8217;avais fait un delete global, mais j&#8217;avais un probleme sur Symbian qui avait deja redefini le delete global, qui se trouve dans une lib et non une dll&#8230; Juste a cause de Symbian, j&#8217;allais etre a deux doigts de faire deriver toutes les classes (les miennes plus celles du client) d&#8217;une classe vide qui redefinissait juste l&#8217;operateur delete, avec toutes les merdes eventuelles (integrations d&#8217;autres libs, creation d&#8217;une classe derivant de deux classes differentes&#8230;).</p>
<p>Et la je me suis dit, je perds rien a essayer le coup du template&#8230; Et BINGO !!! Le compilo, quand il genere le code template, elimine tout seul comme un grand la ligne qui contient _pPointer-&gt;~T() si il s&#8217;agit d&#8217;un type primitif ou d&#8217;une classe sans destructeur <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> Du coup plus besoin de creer de classe de base, ni d&#8217;avoir deux macros de delete differentes&#8230; Le bonheur&#8230; Teste sur compilos Microsoft et gcc&#8230;. Trop fort, je pars en week end heureux&#8230;<br />
En revanche implementer l&#8217;appel des destructeurs dans le delete d&#8217;un tableau de classes, ca fait une macro absolument horrible !!!</p>
<p>Voili, voilou <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-283</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Thu, 30 Nov 2006 15:55:56 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-283</guid>
		<description>Marrant, je viens de passer un peu de temps aussi la dessus :)

En fait je trouve qu'en C++ c'est vraiment pas pratique de faire son gestionnaire memoire. Il y a tout plein de petits details qui font qu'il faut faire vachement gaffe. C'est vraiment pas pense simple.

Par exemple, quand tu fais un operateur placement new, tu as interet a faire le delete "equivalent", sinon si il y a exception dans le constructeur appele par un placement new, la memoire allouee avant ne sera pas liberee.
Autre chose, j'utilisais aussi l'appel du destructeur explicite "myClass-&#62;~MyClass()" mais evidemment un client a voulu pouvoir utiliser le new sans differencier les classes et les types C primitifs. Autant dire que "a-&#62;~int()" ca compile pas vraiment ! J'ai donc du changer de systeme et ca s'est avere etre une vraie galere.
Sans compter que si tu veux gerer les tableaux de classe, ca devient vraiment subtil suivant si ta classe a un destructeur ou pas par exemple...

Au final on y arrive, mais quelle prise de tete, surtout quand on travaille avec des environnements "exotiques" genre Symbian qui redefinit deja plein de trucs.

Petite precision: chaque dll peut avoir son new/delete global. Ce n'etait pas tres clair dans les commentaires.

Au final c'est super, mais si on veut faire les choses bien, c'est pas si evident que ca en a l'air a premiere vue.</description>
		<content:encoded><![CDATA[<p>Marrant, je viens de passer un peu de temps aussi la dessus <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En fait je trouve qu&#8217;en C++ c&#8217;est vraiment pas pratique de faire son gestionnaire memoire. Il y a tout plein de petits details qui font qu&#8217;il faut faire vachement gaffe. C&#8217;est vraiment pas pense simple.</p>
<p>Par exemple, quand tu fais un operateur placement new, tu as interet a faire le delete &#8220;equivalent&#8221;, sinon si il y a exception dans le constructeur appele par un placement new, la memoire allouee avant ne sera pas liberee.<br />
Autre chose, j&#8217;utilisais aussi l&#8217;appel du destructeur explicite &#8220;myClass-&gt;~MyClass()&#8221; mais evidemment un client a voulu pouvoir utiliser le new sans differencier les classes et les types C primitifs. Autant dire que &#8220;a-&gt;~int()&#8221; ca compile pas vraiment ! J&#8217;ai donc du changer de systeme et ca s&#8217;est avere etre une vraie galere.<br />
Sans compter que si tu veux gerer les tableaux de classe, ca devient vraiment subtil suivant si ta classe a un destructeur ou pas par exemple&#8230;</p>
<p>Au final on y arrive, mais quelle prise de tete, surtout quand on travaille avec des environnements &#8220;exotiques&#8221; genre Symbian qui redefinit deja plein de trucs.</p>
<p>Petite precision: chaque dll peut avoir son new/delete global. Ce n&#8217;etait pas tres clair dans les commentaires.</p>
<p>Au final c&#8217;est super, mais si on veut faire les choses bien, c&#8217;est pas si evident que ca en a l&#8217;air a premiere vue.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-264</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Tue, 28 Nov 2006 23:19:13 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-264</guid>
		<description>Coucou Nickaru, decidement tes posts sont choppes par le filtre anti-spam.

Pour le 1) tu alloues normallement toutes la memoire dispo sur console lorsque tu crees ton allocateur.
Apres c'est simple de savoir quand y'a plus de memoire, ton allocateur te le dit et t'as pas eu besoin de t'embeter avec des exceptions.

Ca sert a que dalle les exceptions handling pour des jeux sur console, a part rendre le code plus difficile a debugger et perdre de la place memoire (meme si c'est qu'en debug) ;)

2) Comme disait Mark (ouais le meme pour lequel j'ai enormement de respect) les singletons sont la sources du mal hehe, mais bon je reviendrai une autre fois la dessus.

Bah dis donc, content que tu trouve le GI tres propre. Generallement les gens ont un peu de mal a comprendre comment on utilise des interfaces en C++.
Quake c'etait du C quoi qu'on en dise donc c'est clair que c'est pas vraiment ce qu'il faut prendre comme exemple si on veut progresser en programmation oriente objet :)

Merci pour les compliments sur le GI, ca fait plaisir. le GIMemory est l'une des dernieres libs que j'ai faite donc les plus vieilles sont bien moins propres malheureusement et pas vraiemnt le temps de tour reconcevoir.

Et comme disait encore Mark lorsqu'on faisait du code review ensemble (decidemment une grande source d'inspiration pour moi en prog ce Mark), la seule chose qui compte c'est les headers file et la defintion des interfaces car si c'est bon le reste (comprendre l'implementation) peut etre changee si besoin est sans impacte.</description>
		<content:encoded><![CDATA[<p>Coucou Nickaru, decidement tes posts sont choppes par le filtre anti-spam.</p>
<p>Pour le 1) tu alloues normallement toutes la memoire dispo sur console lorsque tu crees ton allocateur.<br />
Apres c&#8217;est simple de savoir quand y&#8217;a plus de memoire, ton allocateur te le dit et t&#8217;as pas eu besoin de t&#8217;embeter avec des exceptions.</p>
<p>Ca sert a que dalle les exceptions handling pour des jeux sur console, a part rendre le code plus difficile a debugger et perdre de la place memoire (meme si c&#8217;est qu&#8217;en debug) <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>2) Comme disait Mark (ouais le meme pour lequel j&#8217;ai enormement de respect) les singletons sont la sources du mal hehe, mais bon je reviendrai une autre fois la dessus.</p>
<p>Bah dis donc, content que tu trouve le GI tres propre. Generallement les gens ont un peu de mal a comprendre comment on utilise des interfaces en C++.<br />
Quake c&#8217;etait du C quoi qu&#8217;on en dise donc c&#8217;est clair que c&#8217;est pas vraiment ce qu&#8217;il faut prendre comme exemple si on veut progresser en programmation oriente objet <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Merci pour les compliments sur le GI, ca fait plaisir. le GIMemory est l&#8217;une des dernieres libs que j&#8217;ai faite donc les plus vieilles sont bien moins propres malheureusement et pas vraiemnt le temps de tour reconcevoir.</p>
<p>Et comme disait encore Mark lorsqu&#8217;on faisait du code review ensemble (decidemment une grande source d&#8217;inspiration pour moi en prog ce Mark), la seule chose qui compte c&#8217;est les headers file et la defintion des interfaces car si c&#8217;est bon le reste (comprendre l&#8217;implementation) peut etre changee si besoin est sans impacte.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nickaru</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-253</link>
		<dc:creator>Nickaru</dc:creator>
		<pubDate>Mon, 27 Nov 2006 19:10:25 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-253</guid>
		<description>Salut,

1)Le signalement pour le manque de mémoire n’est activé que pour la version debug et les beta test. Juste pour être certain qu’il y a bien assez de mémoire.

2)La méthode vient de la déclaration de singleton que j’avais trouvé dans un bouquin. Mais c’est vrai que si de nombreuses classes héritent de ce template, j’aurais beaucoup de définition des méthodes.

Je crois que je vais effectivement mixer les méthodes. Utiliser la surcharge pour les objets dont je suis certain à 100% du nombre (ex. je ne veut pas qu’il y ait plus de 1024 Clients en même temps) et ta méthode pour tout le reste.

Et vraiment l’implémentation dans GI est vraiment très propre et agréable à lire (Infiniment plus que certain jeu commerciaux cf quake). GI à l’air assez simple à prendre en main, faut que je regarde l’ensemble de plus prêt.

Nickaru</description>
		<content:encoded><![CDATA[<p>Salut,</p>
<p>1)Le signalement pour le manque de mémoire n’est activé que pour la version debug et les beta test. Juste pour être certain qu’il y a bien assez de mémoire.</p>
<p>2)La méthode vient de la déclaration de singleton que j’avais trouvé dans un bouquin. Mais c’est vrai que si de nombreuses classes héritent de ce template, j’aurais beaucoup de définition des méthodes.</p>
<p>Je crois que je vais effectivement mixer les méthodes. Utiliser la surcharge pour les objets dont je suis certain à 100% du nombre (ex. je ne veut pas qu’il y ait plus de 1024 Clients en même temps) et ta méthode pour tout le reste.</p>
<p>Et vraiment l’implémentation dans GI est vraiment très propre et agréable à lire (Infiniment plus que certain jeu commerciaux cf quake). GI à l’air assez simple à prendre en main, faut que je regarde l’ensemble de plus prêt.</p>
<p>Nickaru</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: MMoi</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-251</link>
		<dc:creator>MMoi</dc:creator>
		<pubDate>Mon, 27 Nov 2006 09:56:20 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-251</guid>
		<description>Tres interessant article !

je decouvre un peu ce blog au hasard, un petit de plus pour mon agregateur RSS ^_^

je vais un peu plus fouiller, mais ca fait plaisir de trouver un blog de programmeur dans le jeu, bonne continuation ! :)</description>
		<content:encoded><![CDATA[<p>Tres interessant article !</p>
<p>je decouvre un peu ce blog au hasard, un petit de plus pour mon agregateur RSS ^_^</p>
<p>je vais un peu plus fouiller, mais ca fait plaisir de trouver un blog de programmeur dans le jeu, bonne continuation ! <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-247</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Sat, 25 Nov 2006 15:21:19 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-247</guid>
		<description>Salut Nickaru,

Alors dans l'ordre

1. Si t'as plus de memoire ca sert a rien de prevenir l'utilisateur.
"Desole vous n'avez plus assez de memoire rebooter votre console" :) comme dirait un dev principale sur XBox, interceptez pas les exceptions ca sert a rien.
On utilise pas les exception handling pour les jeux (de maniere generalle), c'est une perte de memoire de l'activer.
Pour les outils en revanche c'est plus qu'important pour pas perdre ses donnees.

2. Tu parles en fait d'overload de new et delete de class. C'est en effect possible et recommander pour les objets de la meme taille que tu vas allouer/desallouer souvent. C'est assez courant sur console mais la generalisation que tu fais me semble etre plus lourde qu'interessante.

Maintenant l'allocateur dont je parle dans l'article devrait etre appele dans ton implementation de new et delete de classe.</description>
		<content:encoded><![CDATA[<p>Salut Nickaru,</p>
<p>Alors dans l&#8217;ordre</p>
<p>1. Si t&#8217;as plus de memoire ca sert a rien de prevenir l&#8217;utilisateur.<br />
&#8220;Desole vous n&#8217;avez plus assez de memoire rebooter votre console&#8221; <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> comme dirait un dev principale sur XBox, interceptez pas les exceptions ca sert a rien.<br />
On utilise pas les exception handling pour les jeux (de maniere generalle), c&#8217;est une perte de memoire de l&#8217;activer.<br />
Pour les outils en revanche c&#8217;est plus qu&#8217;important pour pas perdre ses donnees.</p>
<p>2. Tu parles en fait d&#8217;overload de new et delete de class. C&#8217;est en effect possible et recommander pour les objets de la meme taille que tu vas allouer/desallouer souvent. C&#8217;est assez courant sur console mais la generalisation que tu fais me semble etre plus lourde qu&#8217;interessante.</p>
<p>Maintenant l&#8217;allocateur dont je parle dans l&#8217;article devrait etre appele dans ton implementation de new et delete de classe.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nickaru</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-244</link>
		<dc:creator>Nickaru</dc:creator>
		<pubDate>Sat, 25 Nov 2006 11:58:34 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-244</guid>
		<description>Bonjour

J'ai lu avec attention cette article que je trouve vraiment intéressant. Mais en même temps ça chamboule un peu ma méthode préférée qui est comme suit :

template 
class Cachable
{
	public :
	
	void * operator new (size_t t) throw (int)
	{
		//...ici on retourne un objet libre du stack
		//...ou on envoie un exception si on n'a pas la place
		//...qu'on réoccuper la ou on a appeler new pour faire un jolie
		//.. output de débugage
	}
	
	void operator delete(void * c)
	{
		//.. on indique que l'objet utilisé est libre maintenant
	}
	
	protected :
	
	static void *		stack; // le tas d'objet utilisable
};

template 
void *	Cachable::stack = malloc(sizeof(T)*STACKS_SIZE); //on alloue la mémoire pour le tas d'objet de taille  STACKS_SIZE

Ainsi on a plus qu'a dériver une classe a partir de celle-ci comme suit

class Client : public Cachable

L'appelle devient vite encombrant a cause de try catch (mais c'est seulement dans la version debug donc ça va) . En plus pour déterminer la meilleur taille de cache il faut créer une classe équivalente a Cachable mais qui sert juste à logger l'utilisation de la mémoire en fonction de l'état du jeu.

Comme je ne suis pas le plus grand spécialiste de la gestion de la mémoire je me demande la quelle est la plus utilisé dans l'industrie.

Nickaru</description>
		<content:encoded><![CDATA[<p>Bonjour</p>
<p>J&#8217;ai lu avec attention cette article que je trouve vraiment intéressant. Mais en même temps ça chamboule un peu ma méthode préférée qui est comme suit :</p>
<p>template<br />
class Cachable<br />
{<br />
	public :</p>
<p>	void * operator new (size_t t) throw (int)<br />
	{<br />
		//&#8230;ici on retourne un objet libre du stack<br />
		//&#8230;ou on envoie un exception si on n&#8217;a pas la place<br />
		//&#8230;qu&#8217;on réoccuper la ou on a appeler new pour faire un jolie<br />
		//.. output de débugage<br />
	}</p>
<p>	void operator delete(void * c)<br />
	{<br />
		//.. on indique que l&#8217;objet utilisé est libre maintenant<br />
	}</p>
<p>	protected :</p>
<p>	static void *		stack; // le tas d&#8217;objet utilisable<br />
};</p>
<p>template<br />
void *	Cachable::stack = malloc(sizeof(T)*STACKS_SIZE); //on alloue la mémoire pour le tas d&#8217;objet de taille  STACKS_SIZE</p>
<p>Ainsi on a plus qu&#8217;a dériver une classe a partir de celle-ci comme suit</p>
<p>class Client : public Cachable</p>
<p>L&#8217;appelle devient vite encombrant a cause de try catch (mais c&#8217;est seulement dans la version debug donc ça va) . En plus pour déterminer la meilleur taille de cache il faut créer une classe équivalente a Cachable mais qui sert juste à logger l&#8217;utilisation de la mémoire en fonction de l&#8217;état du jeu.</p>
<p>Comme je ne suis pas le plus grand spécialiste de la gestion de la mémoire je me demande la quelle est la plus utilisé dans l&#8217;industrie.</p>
<p>Nickaru</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: darjul</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-242</link>
		<dc:creator>darjul</dc:creator>
		<pubDate>Fri, 24 Nov 2006 21:16:09 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-242</guid>
		<description>@msx
Les mecs dont tu parles, j'aimerais bien connaitre leurs noms. Ma main à couper que soit:
1) Ils ont pas bossé sur Adibou PS2 mais sur d'autres Adibou.
2) Quelqu'un a fait le ménage pour eux sans même qu'ils le sachent (hautement probable).
Mais je peux t'assurer que dans la gold, y'a pas d'allocs pendant le gameplay.

Je suis d'accord, ODE est trop naze (d'ailleurs dans la 0.5 y'a pas d'allocs pendant l'update alors que la 0.7 y'en a une à chaque update, raison pour laquelle je suis resté en 0.5). Mais c'est le seul que je connaisse qui marchotte ET qui soit fournit avec les sources. Et justement grâce à ça, contrairement à ce que tu dis, ça fonctionne pas que sur PC. Mon projet perso tourne aussi sur Xbox (ouais ok c'est x86 aussi mais bon) et en utilisant Bullet à la place de Ice on doit pouvoir compiler aussi sur Xbox 360 (je pense que c'est des vieux asm {} de Ice dont tu parles pour le code x86 ?). Tokamak/Newton/Ageia: les consoles faut oublier puisque ni les sources ni les libs consoles ne sont fournies. Il y a aussi Bullet et TrueAxis, mais je ne sais pas encore ce qu'ils valent. Donc si tu connais un truc super (un ode en mieux quoi), je suis preneur, parce que ODE c'est le seul choix possible dans mon cas, faute de mieux.</description>
		<content:encoded><![CDATA[<p>@msx<br />
Les mecs dont tu parles, j&#8217;aimerais bien connaitre leurs noms. Ma main à couper que soit:<br />
1) Ils ont pas bossé sur Adibou PS2 mais sur d&#8217;autres Adibou.<br />
2) Quelqu&#8217;un a fait le ménage pour eux sans même qu&#8217;ils le sachent (hautement probable).<br />
Mais je peux t&#8217;assurer que dans la gold, y&#8217;a pas d&#8217;allocs pendant le gameplay.</p>
<p>Je suis d&#8217;accord, ODE est trop naze (d&#8217;ailleurs dans la 0.5 y&#8217;a pas d&#8217;allocs pendant l&#8217;update alors que la 0.7 y&#8217;en a une à chaque update, raison pour laquelle je suis resté en 0.5). Mais c&#8217;est le seul que je connaisse qui marchotte ET qui soit fournit avec les sources. Et justement grâce à ça, contrairement à ce que tu dis, ça fonctionne pas que sur PC. Mon projet perso tourne aussi sur Xbox (ouais ok c&#8217;est x86 aussi mais bon) et en utilisant Bullet à la place de Ice on doit pouvoir compiler aussi sur Xbox 360 (je pense que c&#8217;est des vieux asm {} de Ice dont tu parles pour le code x86 ?). Tokamak/Newton/Ageia: les consoles faut oublier puisque ni les sources ni les libs consoles ne sont fournies. Il y a aussi Bullet et TrueAxis, mais je ne sais pas encore ce qu&#8217;ils valent. Donc si tu connais un truc super (un ode en mieux quoi), je suis preneur, parce que ODE c&#8217;est le seul choix possible dans mon cas, faute de mieux.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: msx</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-239</link>
		<dc:creator>msx</dc:creator>
		<pubDate>Fri, 24 Nov 2006 19:01:29 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-239</guid>
		<description>hello,

darjul : "Ne me dit pas que tu croies sincèrement que la concurrence fait des allocations dynamiques pendant les séquences de gameplay? Même sur 4d1bou PS2 il n’y en a pas. Je le sais, j’en ai dégagé quelques unes qui trainaient en fin de projet :=)", “Content de voir qu’4d1bou etait a la pointe des techniques  ”
j'ai déjà bossé avec des mecs issus d'4d1bou et je peux te dire qu'ils laissent plein d'allocations dynamiques à tout les niveaux du jeu (même pendant la phase gameplay). La leçon de la PS2 ne leur a pas servi (pour une majorité sauf darjul :) ). Je me suis même fais taper sur les doigts en voulant développer "sans allocation pendant la phase gameplay". Mais bon c'est le nombre d'années d'XP (à rien glander) qui compte.

darjul :"Effectivement après vérif, 0DE passe par une structure, donc pas étonnant que j’ai pas eu de problème de link. Faut que je fasse gaffe moi"
0DE c'est trop naze. ça fonctionne que sur PC (y a du code assemleur x86 à l'interieur)... c bon j'arrete le troll

ps: désolé du poste</description>
		<content:encoded><![CDATA[<p>hello,</p>
<p>darjul : &#8220;Ne me dit pas que tu croies sincèrement que la concurrence fait des allocations dynamiques pendant les séquences de gameplay? Même sur 4d1bou PS2 il n’y en a pas. Je le sais, j’en ai dégagé quelques unes qui trainaient en fin de projet :=)&#8221;, “Content de voir qu’4d1bou etait a la pointe des techniques  ”<br />
j&#8217;ai déjà bossé avec des mecs issus d&#8217;4d1bou et je peux te dire qu&#8217;ils laissent plein d&#8217;allocations dynamiques à tout les niveaux du jeu (même pendant la phase gameplay). La leçon de la PS2 ne leur a pas servi (pour une majorité sauf darjul <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Je me suis même fais taper sur les doigts en voulant développer &#8220;sans allocation pendant la phase gameplay&#8221;. Mais bon c&#8217;est le nombre d&#8217;années d&#8217;XP (à rien glander) qui compte.</p>
<p>darjul :&#8221;Effectivement après vérif, 0DE passe par une structure, donc pas étonnant que j’ai pas eu de problème de link. Faut que je fasse gaffe moi&#8221;<br />
0DE c&#8217;est trop naze. ça fonctionne que sur PC (y a du code assemleur x86 à l&#8217;interieur)&#8230; c bon j&#8217;arrete le troll</p>
<p>ps: désolé du poste</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-238</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Fri, 24 Nov 2006 18:33:08 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-238</guid>
		<description>darjul petit d, pour eviter de fragmenter te suffit de pas desallouer. C'est plus facile a dire qu'a faire ce qui explique que ceux qui y arrivent se demerdent bien :)

Y'as plusieurs techniques, t'as certains programmes qui se demerdent pour allouer dans le meme ordre et toujours desallouer dans le sens inverse (je crois que ca s'appelle frame allocation ou du genre).

Sinon tu peux avoir plusieurs allocateur pour plusieurs parties du jeu.
Sur black n white on avait dumpe la stack apres loading. Ensuite une fois une partie finie on remplacait directement la memoire avec le dump sans se faire chier avec ce qui etait encore alloue. huhu. Ca permettait de pas avoir de probleme en multiplayer surtout. Mais bon c'etait un peu extreme comme technique et je recommande pas.

Puis comme t'alloue/desalloue pas pendant une partie y'a pas de soucis normallement.</description>
		<content:encoded><![CDATA[<p>darjul petit d, pour eviter de fragmenter te suffit de pas desallouer. C&#8217;est plus facile a dire qu&#8217;a faire ce qui explique que ceux qui y arrivent se demerdent bien <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Y&#8217;as plusieurs techniques, t&#8217;as certains programmes qui se demerdent pour allouer dans le meme ordre et toujours desallouer dans le sens inverse (je crois que ca s&#8217;appelle frame allocation ou du genre).</p>
<p>Sinon tu peux avoir plusieurs allocateur pour plusieurs parties du jeu.<br />
Sur black n white on avait dumpe la stack apres loading. Ensuite une fois une partie finie on remplacait directement la memoire avec le dump sans se faire chier avec ce qui etait encore alloue. huhu. Ca permettait de pas avoir de probleme en multiplayer surtout. Mais bon c&#8217;etait un peu extreme comme technique et je recommande pas.</p>
<p>Puis comme t&#8217;alloue/desalloue pas pendant une partie y&#8217;a pas de soucis normallement.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stéphane</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-237</link>
		<dc:creator>Stéphane</dc:creator>
		<pubDate>Fri, 24 Nov 2006 09:57:04 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-237</guid>
		<description>Hmm la feature budget tu pourrais aussi l'implémenter en faisant que ta macro appelle une fonction templaté avec une implémentation générique, puis une spécialisation par type d'objet qui loggue l'usage mémoire de ces objets, vu qu'en principe les différents sous système alloue des types d'objets différents.

C'est pas une solution parfaite mais elle a l'avantage de pouvoir s'intégrer rapidement dans le code que tu as écris.</description>
		<content:encoded><![CDATA[<p>Hmm la feature budget tu pourrais aussi l&#8217;implémenter en faisant que ta macro appelle une fonction templaté avec une implémentation générique, puis une spécialisation par type d&#8217;objet qui loggue l&#8217;usage mémoire de ces objets, vu qu&#8217;en principe les différents sous système alloue des types d&#8217;objets différents.</p>
<p>C&#8217;est pas une solution parfaite mais elle a l&#8217;avantage de pouvoir s&#8217;intégrer rapidement dans le code que tu as écris.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Chatelaine</title>
		<link>http://jeremy.chatelaine.name/blog/programmation/le-control-de-la-memoire#comment-236</link>
		<dc:creator>Jeremy Chatelaine</dc:creator>
		<pubDate>Fri, 24 Nov 2006 09:06:12 +0000</pubDate>
		<guid isPermaLink="false">http://jeremy.chatelaine.name/blog/?p=36#comment-236</guid>
		<description>Hop voila tout est change, merci encore Jeckle. Si t'as d'autres tips sympa comme ca hesite pas ;)

Pour les debutants en prog qui voudraient copier la fonction, oubliez pas le &lt;typename&gt; sinon le compilateur va pas comprendre T

template &lt;typename T&gt;
inline void CallDestructor(T* _pPointer)
{
    _pPointer-&gt;~T();
}</description>
		<content:encoded><![CDATA[<p>Hop voila tout est change, merci encore Jeckle. Si t&#8217;as d&#8217;autres tips sympa comme ca hesite pas <img src='http://jeremy.chatelaine.name/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Pour les debutants en prog qui voudraient copier la fonction, oubliez pas le <typename> sinon le compilateur va pas comprendre T</p>
<p>template </typename><typename T><br />
inline void CallDestructor(T* _pPointer)<br />
{<br />
    _pPointer->~T();<br />
}</typename></p>
]]></content:encoded>
	</item>
</channel>
</rss>

