Allocation memoire (deplacer depuis C++/resaux)

bon, j’ai enlever des bout, pour faire des reponses en block
 

[quote]

[quote]du temps, de la memoire, et de la maitrise : t’es sur que y a pas un autres truc qui va te faire un alloc dans le dos, et puis tu sais ou sont les trucs, vu que comme t’es tres fort : t’as fait une map de la memoire ! [/quote]malloc/free sont justement la pour te permettre de gerer une map de la memoire de facon simple. Si tu prefere gerer tout ca a la main a coups de mmap ou sbrk, je pense que tu t’embetes pour rien, ou alors tu as besoin d’un truc ultra optimise (et peu portable).
Dans certains languages de haut niveau il n’y a pas de malloc/free, mais quand tu declares ou que tu affectes une variable, c’est le compilo qui se charge de faire les malloc pour toi, et le garbage collector qui libere la memoire quand elle ne sert plus.

[/quote]En terme de truc “ultra optimise”, je reponds oui : je parle de programmation console, la ou la memoire est super limite, un pays ou on en viens a reduire la taille de la pile (celle dont tu parle ) a 8ko, pour gagner 8ko de plus, un pays ou oui, se dire que 8 octets (ca depends des systems, donc c’est pas une valeurs fixe) partent dans les limbes alors que ca pourrait etre utilise pour faire autre choses ( j’ai parfois vue jusqu’a 1Mo de memoire utilise par le system d’allocation (sans compter le code ! parce qu’il faut bien le mettre quelquepart, le code…), 1Mo!! on peut en foutre des trucs, dans un Mega !!! 

Quand aux garbage collector, c’est la grande angoisse du programmeur de console ce truc la : tu doit t’assurer que ta boucle principale (rendu compris) va etre complete en moins d’1/60eme de seconde!, mais si tu :

  • Ne sais pas ce qui va etre allouer ou juste creer sur la pile (une allocation en memoire prends plus de temps CPU qu'une allocation sur la pile (pour la memoire t'as le gestionnaire, pour la pile tu rajoute sizeof(tavariable) a ton pointer et t'es cool !)))
  • Ne sait pas si le moteur ne decide pas a ce moment la de liberer de la memoire (et ca prends aussi du temps CPU, cette connerie ),
  • tu ne peux pas proprement timer ton appli !

    c’est un peu con de se demander si on peut allouer de la memoire, alors qu’on SAIT que personne d’autre n’est la : c’est un peu comme frapper a la porte des chiotes qu’en on habite tout seul

    Le quelqu’un d’autre ca peux aussi etre toi. Si quand tu as besoin d’enregistrer un truc tu choisis de le mettre aleatoirement dans une zone de la memoire sans te preoccuper de savoir si quelquechose d’important etait la avant, tu vas vers de gros problemes.

    bah, le truc, c’est qu’on evite de prendre une adresse aux hazard (tiens et maintenant je vais ecrire … la: tadaa 0x01230012 !!!
    ca se prepare :
    par example, imaginons que tu as des missilles dans ton jeux, et que tu SAIS que tu ne peux pas en avoir plus de 256 a l’ecran, tu peux pas, c’est pas possible, c’est comme ca !

    tu peux soit faire :

    static int numMissile;

    missile *
    launchmissile(void)
    {
      if( numMissile < 256 )
      {
        missile *newmissile = (missile *)malloc(sizeof(missile));
      initmissile(newmissile);
      numMissile++;
      return newmissile;
      }

      return NULL

    [/quote]ou tu te tappe donc un malloc et un free a chaque fois qu’un missile est lancer/detruit
    soit faire un :

    static missile missileStack[256]; static int numMissile;

    missile *
    launchmissile(void)
    {
      if( numMissile < 256 )
      {
        missile *newmissile = &missileStack[numMissile];
      initmissile(newmissile);
      numMissile++;
      return newmissile;
      }

      return NULL

    [/quote]qui va etre beaucoup beaucoup beaucoup plus rapide a executer.

    et qui te permet, en plus, d’etre sur que TOUT tes missilles sont au meme endroit en memoire, et donc evite la fragmentation (parce que ca aussi c’est mal la fragmentation, et nous sur consoles : on aime pas gacher )

    (bon il est evident que la gestion de la stack de missile demanderait, dans la vrais vie, un peu plus de gestions, mais je laisse ca a votre imagination )

    et en ce qui concerne la portabilite, comme tu peux le voir dans l’example : c’est aussi portable, si ce n’est plus qu’un malloc (certains OS ne supportant pas malloc par defaut (oui, ca existe : des machines sur lequel le malloc n’existe juste pas !) ), et ca evite de chasser le leak !

    Ce message a été édité par c0unt0 le 15/04/2003

    Ton post est totalement paradoxal, c0unt0:

    Dans la premiere partie, tu dis que t’as tres peu de memoire, et que
    chaque bit compte.

    Mais avec ton exemple, tu prouve totalement le contraire!! Tu dis qu’il
    est preferable de faire un tableau de 256 missiles static  plutot
    que de faire des malloc/free.

    Si je suis d’accord sur le fait que le malloc est plus long que le
    PUSH*sizeof(plein de missile) en pile, je trouve que tu te contredis
    quand meme un peu

    Plus simplement, la programmation de ce type est affaire de compromis:
    Vitesse ou economie memoire?

    Tu as choisi vitesse, mais ca ne correspond pas a ce que tu dis au
    debut de ton post

    LoneWolf

    Mouse has an out of cheese error.

    oui.
    Mais non !

    On peut voir ca comme un gachi de memoire, mais ca n’en ai pas un, car tout repose sur le fait que je SAIS que je vais avoir besoin de 256 missiles, et que donc quite a choisir entre malloc/free et static, je prends la solutions la plus simple…

    le truc est de designer ton appli autour de ce que tu sais:
    la connaissance est la source du pouvoir
    (c bo : on dirait du kant, ou du Henry Rollins ).

    Dans une version plus evolue (qui est d’ailleurs bien souvent ce qui se fait vraiment): tu peut dire, voila j’ai tant de memoire pour un nivo, et apres c’est aux artistes et au game-designer de balancer le nivo, pour mettre peut etre un peu moins de missiles mais un peu plus de jesaispasquoi d’autres.

    comme je le disais, l’example est simpliste, mais fonctionels

    Ok, je crois que j’ai compris ce que tu voullais dire. Tu parles en fait
    d’eviter au maximum les petits malloc de tous les cotes, et remplacer
    ca par des gros tableaux en variables globales alloues au demarrage.

    Effectivement dans ce cas la c’est bien plus rapide …

    [quote]Ton post est totalement paradoxal, c0unt0:

    Plus simplement, la programmation de ce type est affaire de compromis:
    Vitesse ou economie memoire?

    Tu as choisi vitesse, mais ca ne correspond pas a ce que tu dis au
    debut de ton post [/quote] Effectivement, si le joueur n’utilise pas les 256 missiles
    possibles, il y a gachi de memoire. Mais sachant que le joueur doit
    pouvoir avoir la possibilte d’en avoir 256 a n’importe quel moment, on
    ne peux pas se permettre d’utiliser cette memoire pour autre chose ?

    [quote]

    le truc est de designer ton appli autour de ce que tu sais:

    la connaissance est la source du pouvoir

    (c bo : on dirait du kant, ou du Henry Rollins ).

    Hehe. Personnelement, j'ai bosse sur des projets avec ZERO spec, et donc sans aucune possiblite de ce type.

    Et ca me lourde grave.

    LoneWolf

    J’ai envie de me CASSER putain… Mais pour aller ou?

    Héhé je n’avais pas vu ce thread. Très intéressant.

    J’appuie la méthode utilisé par c0unt0 (très utilisée en temps réel) sauf qu’il faut prévoir une protection si le LaunchMissile peut être interrompu par un autre joueur qui fait aussi un LaunchMissile, sinon plouf

    C’est moi ou il y a des posts qui ont disparu de ce thread ?

    C’est toi …

    xentyrounet > en fait c0unt0 avait crée ce thread comme suite ( enfin à côté ) à un autre du même theme, c’est pour ça, tu dois confondre avec les réponses de l’autre thread

    Mea culpa 

    J’ai pas l’habitude de voir des threads dériver correctement sur la Cafzone en un thread bien propre.

    [Mode Lèche ON]
    Mais forcément on ne peut pas s’attendre à moins de la part d’un modérateur consciencieux comme c0unt0 …
    [/Mode Lèche OFF]

    [quote][Mode Lèche ON]
    Mais forcément on ne peut pas s’attendre à moins de la part d’un modérateur consciencieux comme c0unt0 …
    B) c’est meme pas vrais : la preuve ? Je suis en train de flooder, et de offtopicer en ce moment meme…