begin process at 2012 05 30 04:16:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Memory Pool


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Memory Pool

lundi 25 août 2003 à 16:55:41 | Memory Pool

guiguikun

Bonjour,

j'ai téléchargé la partie du code source de Quake3 releasé par ID Software par curiosité.
Je l'ai lu pour voir un peu comment le jeu fonctionnait et quelque chose m'a interpelé : la memory pool

ils déclarent une tableau de char de 256 Mo (char MemoryPool[256 * 1024];)

et lorsqu'ils ont besoin d'une allocation de mémoire (de type new ou malloc() en C), ils utilisent une fonction a eux qui renvoit un pointeur se situant dans le tableau des char.

A chaque allocation ils avancent le pointeur de n position (n etant la taille demandée) et le renvoient.

Quel est l'interet d'un tel systeme ? La vitesse ? Est-ce qu'un malloc prend-il autant de temps ?

C'est plutôt "bête" car le programme utilise d'office 256Mo de mémoire et ya pas de fonctions pour désallouer la memoire dans leur système.

voici un copier coller de leur système de gestion de la mémoire :

// Copyright (C) 1999-2000 Id Software, Inc.
//
//
// g_mem.c
//


#include "g_local.h"


#define POOLSIZE (256 * 1024)

static char memoryPool[POOLSIZE];
static int allocPoint;

void *G_Alloc( int size ) {
char *p;

if ( g_debugAlloc.integer ) {
G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
}

if ( allocPoint + size > POOLSIZE ) {
G_Error( "G_Alloc: failed on allocation of %i bytes\n", size ); // bk010103 - was %u, but is signed
return NULL;
}

p = &memoryPool[allocPoint];

allocPoint += ( size + 31 ) & ~31;

return p;
}

void G_InitMemory( void ) {
allocPoint = 0;
}

void Svcmd_GameMem_f( void ) {
G_Printf( "Game memory status: %i out of %i bytes allocated\n", allocPoint, POOLSIZE );
}
lundi 25 août 2003 à 17:02:37 | Re : Memory Pool

BruNews

Administrateur CodeS-SourceS
La vitesse assurement, quant au fait de ne pas desallouer on se doute qu'on utilise ce type de jeu en mono tache sinon le systeme devra recopier tout cela dans son fichier de pagination pour liberer la memoire.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Bonjour,
>
> j'ai téléchargé la partie du code source de Quake3 releasé par ID Software par curiosité.
> Je l'ai lu pour voir un peu comment le jeu fonctionnait et quelque chose m'a interpelé : la memory pool
>
> ils déclarent une tableau de char de 256 Mo (char MemoryPool[256 * 1024];)
>
> et lorsqu'ils ont besoin d'une allocation de mémoire (de type new ou malloc() en C), ils utilisent une fonction a eux qui renvoit un pointeur se situant dans le tableau des char.
>
> A chaque allocation ils avancent le pointeur de n position (n etant la taille demandée) et le renvoient.
>
> Quel est l'interet d'un tel systeme ? La vitesse ? Est-ce qu'un malloc prend-il autant de temps ?
>
> C'est plutôt "bête" car le programme utilise d'office 256Mo de mémoire et ya pas de fonctions pour désallouer la memoire dans leur système.
>
> voici un copier coller de leur système de gestion de la mémoire :
>
> // Copyright (C) 1999-2000 Id Software, Inc.
> //
> //
> // g_mem.c
> //
>
>
> #include "g_local.h"
>
>
> #define POOLSIZE (256 * 1024)
>
> static char memoryPool[POOLSIZE];
> static int allocPoint;
>
> void *G_Alloc( int size ) {
> char *p;
>
> if ( g_debugAlloc.integer ) {
> G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
> }
>
> if ( allocPoint + size > POOLSIZE ) {
> G_Error( "G_Alloc: failed on allocation of %i bytes\n", size ); // bk010103 - was %u, but is signed
> return NULL;
> }
>
> p = &memoryPool[allocPoint];
>
> allocPoint += ( size + 31 ) & ~31;
>
> return p;
> }
>
> void G_InitMemory( void ) {
> allocPoint = 0;
> }
>
> void Svcmd_GameMem_f( void ) {
> G_Printf( "Game memory status: %i out of %i bytes allocated\n", allocPoint, POOLSIZE );
> }
>
lundi 25 août 2003 à 17:49:33 | Re : Memory Pool

guiguikun

Ok mais je trouve pas ca propre...

Que se passe-t-il si, admettons, un joueur joue longtemps sans relancer le jeu ?

ca va alloc a n'en plus finir, le buffer de 256Mo va être plein. seule solution : relancer le jeu. Mouais....

-------------------------------
Réponse au message :
-------------------------------

> La vitesse assurement, quant au fait de ne pas desallouer on se doute qu'on utilise ce type de jeu en mono tache sinon le systeme devra recopier tout cela dans son fichier de pagination pour liberer la memoire.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Bonjour,
> >
> > j'ai téléchargé la partie du code source de Quake3 releasé par ID Software par curiosité.
> > Je l'ai lu pour voir un peu comment le jeu fonctionnait et quelque chose m'a interpelé : la memory pool
> >
> > ils déclarent une tableau de char de 256 Mo (char MemoryPool[256 * 1024];)
> >
> > et lorsqu'ils ont besoin d'une allocation de mémoire (de type new ou malloc() en C), ils utilisent une fonction a eux qui renvoit un pointeur se situant dans le tableau des char.
> >
> > A chaque allocation ils avancent le pointeur de n position (n etant la taille demandée) et le renvoient.
> >
> > Quel est l'interet d'un tel systeme ? La vitesse ? Est-ce qu'un malloc prend-il autant de temps ?
> >
> > C'est plutôt "bête" car le programme utilise d'office 256Mo de mémoire et ya pas de fonctions pour désallouer la memoire dans leur système.
> >
> > voici un copier coller de leur système de gestion de la mémoire :
> >
> > // Copyright (C) 1999-2000 Id Software, Inc.
> > //
> > //
> > // g_mem.c
> > //
> >
> >
> > #include "g_local.h"
> >
> >
> > #define POOLSIZE (256 * 1024)
> >
> > static char memoryPool[POOLSIZE];
> > static int allocPoint;
> >
> > void *G_Alloc( int size ) {
> > char *p;
> >
> > if ( g_debugAlloc.integer ) {
> > G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
> > }
> >
> > if ( allocPoint + size > POOLSIZE ) {
> > G_Error( "G_Alloc: failed on allocation of %i bytes\n", size ); // bk010103 - was %u, but is signed
> > return NULL;
> > }
> >
> > p = &memoryPool[allocPoint];
> >
> > allocPoint += ( size + 31 ) & ~31;
> >
> > return p;
> > }
> >
> > void G_InitMemory( void ) {
> > allocPoint = 0;
> > }
> >
> > void Svcmd_GameMem_f( void ) {
> > G_Printf( "Game memory status: %i out of %i bytes allocated\n", allocPoint, POOLSIZE );
> > }
> >
>
lundi 25 août 2003 à 17:57:24 | Re : Memory Pool

BruNews

Administrateur CodeS-SourceS
Je ne suis pas alle voir le code mais je suppose qu'il y a verif des zones disponibles du buffer. En tout cas vu les 2 especes de genie de la prog qui ont participe a la creation de ce jeu, je presume cela tres bon.
Tu as lu Michael Abrash, Prog C/C++ et ASM, vaut le detour.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Ok mais je trouve pas ca propre...
>
> Que se passe-t-il si, admettons, un joueur joue longtemps sans relancer le jeu ?
>
> ca va alloc a n'en plus finir, le buffer de 256Mo va être plein. seule solution : relancer le jeu. Mouais....
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > La vitesse assurement, quant au fait de ne pas desallouer on se doute qu'on utilise ce type de jeu en mono tache sinon le systeme devra recopier tout cela dans son fichier de pagination pour liberer la memoire.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Bonjour,
> > >
> > > j'ai téléchargé la partie du code source de Quake3 releasé par ID Software par curiosité.
> > > Je l'ai lu pour voir un peu comment le jeu fonctionnait et quelque chose m'a interpelé : la memory pool
> > >
> > > ils déclarent une tableau de char de 256 Mo (char MemoryPool[256 * 1024];)
> > >
> > > et lorsqu'ils ont besoin d'une allocation de mémoire (de type new ou malloc() en C), ils utilisent une fonction a eux qui renvoit un pointeur se situant dans le tableau des char.
> > >
> > > A chaque allocation ils avancent le pointeur de n position (n etant la taille demandée) et le renvoient.
> > >
> > > Quel est l'interet d'un tel systeme ? La vitesse ? Est-ce qu'un malloc prend-il autant de temps ?
> > >
> > > C'est plutôt "bête" car le programme utilise d'office 256Mo de mémoire et ya pas de fonctions pour désallouer la memoire dans leur système.
> > >
> > > voici un copier coller de leur système de gestion de la mémoire :
> > >
> > > // Copyright (C) 1999-2000 Id Software, Inc.
> > > //
> > > //
> > > // g_mem.c
> > > //
> > >
> > >
> > > #include "g_local.h"
> > >
> > >
> > > #define POOLSIZE (256 * 1024)
> > >
> > > static char memoryPool[POOLSIZE];
> > > static int allocPoint;
> > >
> > > void *G_Alloc( int size ) {
> > > char *p;
> > >
> > > if ( g_debugAlloc.integer ) {
> > > G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
> > > }
> > >
> > > if ( allocPoint + size > POOLSIZE ) {
> > > G_Error( "G_Alloc: failed on allocation of %i bytes\n", size ); // bk010103 - was %u, but is signed
> > > return NULL;
> > > }
> > >
> > > p = &memoryPool[allocPoint];
> > >
> > > allocPoint += ( size + 31 ) & ~31;
> > >
> > > return p;
> > > }
> > >
> > > void G_InitMemory( void ) {
> > > allocPoint = 0;
> > > }
> > >
> > > void Svcmd_GameMem_f( void ) {
> > > G_Printf( "Game memory status: %i out of %i bytes allocated\n", allocPoint, POOLSIZE );
> > > }
> > >
> >
>


Cette discussion est classée dans : void, char, size, allocpoint, poolsize


Répondre à ce message

Sujets en rapport avec ce message

probleme sur une classe [ par NerOcrO ] Voici mon code :#include #include class Chanson //classe Chanson{ public: int Duree; char TypeDeFichier[3], Auteur[50], Titre[50], Interprete[50 Convertion d'une string en char [ par redpooka ] Voici avec ce programme ca n'affiche juste le premier charactère comment faire pour qu'il affiche toute la chaine de caracètre ?Merci#include <iostre problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou petite question mais ke j'ai besoin [ par superoi ] bon \jour je sais que c'est con mais j'ai vraiment besoin de savoir c'est pour savoir si ca existe en c ca : long (*f)(void)(char *str); et est ce Probleme de conversion [ par allo8086 ] Salut tous le mondeEnfet, je veux convertir une chaine de caratere lue a partir d'un fichier texte en unsigned char.A propos j'ai essayé de passer pa PROBLEME NETSEND [ par zzzzzz ] En fait j'essaye d'envoyer un message par la fonction net send via internet a ordi qui posssede xp. Si je mjet mon ip ca marche et si je met l'ip de q array size too large [ par gameking ] Bonjour à vous, voici mon probleme. Dans mon programmr j'ai une structure et lorsque je la compile j'ai l,euueur array size too large. Je veux garder conversion float en char [ par laurent180 ] Bonjour a tous,J'aimerai savoir en c ou c++ comment convertir un float en char? quel sont les fonctions ou un exemple?merci a vous.s pb eof en C++ le dernier element est lu 2 fois :( [ par panini21 ] salut a tousvoila g un prog qui permet de creer une 'bibliotheque de jeux'a savoir :les renseignement du jeu sont le prix, le nom, la descriptiopn et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales