Page 1 sur 1

Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 10:27
par microdevweb
Bonjour,

Voila ma question, est-il possible de forcer l'adresse mémoire d'un élément d'une liste. Pourquoi? Imaginons que l'on mémorise, l'adresse mémoire (*id=@maListe()) d'un élément d'une liste en travaille interne. L’utilisateur sauve son travaille (via json ou autres) quant il recharge le fichier de sauvegarde, évidement les adresses ont changées. Est-il possible de forcer Pb à reprendre les mêmes adresses? Perso je ne penses pas

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 11:10
par G-Rom
Non. utilise des index.

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 11:16
par Mesa
Même si c'est probablement possible à coup d'allocatememory et de Poke, je trouve que c'est néanmoins beaucoup de travail et surtout beaucoup de risque d'erreur mémoire et donc de plantage de PC (carrément) pour un faible gain. Ça me rappelle l'époque du DOS ou de Windows 3.11 avec ses plantages et redémarrage d'ordi toutes les "10 minutes".

Il est préférable de faire confiance au système d'exploitation qui va gérer ça bien mieux que le meilleurs des programmeurs.
L'OS saura quoi faire en fonction du contexte: utiliser le disque dur, la mémoire ram, voir les registres du processeurs, ... (heap = tas, pile, mémoire cache, etc.).

M.

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 11:19
par microdevweb
@G-Rom, la solution des index a un problème. Si on supprime un élément (du milieu par exemple) on perds les index. Une map, je penses, mais comme je n'ai pas envie de tous refaire je vais bidouiller quelque chose.

@Mesa, je m'en doutais.

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 11:40
par G-Rom
Tu réindexe tes éléments au moment de la suppression ?

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 12:42
par Marc56
Je ne sais pas comment PB gère les adresses mémoire, mais si c'est une adresse absolue, il n'y a aucune chance de pourvoir réutiliser la même au prochain lancement étant donné que d'autres programmes sont lancés et fermés sans arrêt dans un OS.
Vouloir forcer l'écriture à une adresse ancienne précise va au mieux être rejetée par le noyaux, au pire planter tout.

Si le but est d'utiliser les éléments d'une liste en direct, le mieux est d'utiliser les listes indexées ou les tables de hachage. Les listes liées sont conçues pour êtres utilisées comme des piles de feuilles de papier.

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 13:19
par G-Rom
Ou si vraiment tu tiens a faire comme cela, créer toi un pool de mémoire et stocke les offsets de tes éléments , mais là, cela deviens du brain fuck ^^

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 19:05
par Fig
PB ne gère pas lui-même l'allocation mémoire, il demande au système d'exploitation une adresse libre pour un nouvel élément...

Ceci dit, je ne vois pas où est le problème, au moment où tu sauvegarde tes pointeurs mémoires, tu les transforme en index (puisqu'au moment où tu sauvegarde tu n'as plus d'opération à faire sur les listes: suppression, ajouts etc...)
Et quand tu recharge tes index, tu les transforme alors dans les nouvelles adresses.

C'est très simple, il me semble...

Re: Forcer l'adresse mémoire dun élément d'une liste

Publié : mar. 23/juin/2015 23:41
par microdevweb
Merci Fig,

C'est un peux le système pour le quel j'ai opté, après le chargement (fichier json) je lance une procédure qui réaffecte les pointeurs.