drev Le 13/08/2008 à 16:10 Bonjour,
je dois utilise une liste chaine pour un de mes projets. Existe il une lib optimisé pour ti (j'ai peur que celles que j'ai ne soit trop gourmandes).
Merci !
drev Le 13/08/2008 à 16:59 je vais faire un graphe orianté, soit une liste de liste. Il n'y a vraiment rien de disponible ?
remarque, connaissant le C cela ne m'étonnerai pas..
drev Le 13/08/2008 à 17:25 ouép, en fait h'ai déjà fait pas mal de structures de données en C, ma linked list devrait faire l'affaire (j ai un struct element avec un next element et un void *data) et meme des fonctions de tri avec pointeur de fonctions, et justement, ca pese !
Pour faire un peu plus efficace, il faut mettre le pointeur vers le prochain élément directement dans tes structures, pas utiliser la double indirection.
thibault: beh ta fonction qui renvoie la structure (qui aurait etre etre fait par un malloc) n'a qu'a renvoye celle qui a un indice le moins eleve dans le tableau de structure et libre...
et si tout est plein, beh tu refais la meme chose... gros buffer de structure...
Ouais on peut même utiliser une pile/file pour stocker les indices libres (elle est donc pleine au début), et ça nous fait une allocation en temps constant. Bien sûr tout ça dans le cas où c'est de l'allocation d'un type de structure bien précis.

Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?
L'overhead deviendrait gênant après de nombreuses libérations. La mémoire de cette liste chaînée est gérée comment ? avec malloc/free ? par son propre gestionnaire ? au sein des blocs libres ? Pour diminuer l'overhead, il faudrait un algo pour repérer les blocs consécutifs et les noter en une fois. Comment tu fais pour savoir quels blocs sont à allouer en premier (afin de limiter la dispersion) ?
On commence à compliquer les choses... Une bibliothèque ferait sans doute économiser du temps et des bugs au programmeur !
Tu as déjà essayé de mettre en place ce genre de gestionnaire ? Si oui, ça m'intéresse de voir ton code. J'ai essayé de construire une lib générique en début d'année et j'ai laissé tomber, aucune des solutions auxquelles je pensais ne me satisfaisait. On bouffait soit trop de mémoire, soit trop de temps.
Folco : Mais tous les pointeurs deviennent invalides ?

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Les fonctions de Heap d'AMS ne sont pas connues pour leur rapidité...
En C++, les opérateurs new et free ne sont pas déjà très rapides ?

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Non, grossièrement new c'est un malloc avec en plus un appel de constructeur.

Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?
Quand on a un besoin précis, et c'est le cas ici, on peut faire des politiques d'allocation beaucoup plus efficaces que celles de malloc/free, qui sont des politiques d'allocation génériques.
C'est implementation-defined, ça.
C'est pour ça (entre autres) que le C++ est lent ? Vu que tout est objet, les choses aussi fréquentes que "chaine 1"+"chaine2" demandent une allocation.

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Ça se passe sur la pile tout ça donc c'est pas vraiment des allocations.
Mais par contre il est facile des choses lentes si on ne fait pas attention. Dans l'exemple que tu donnes: "a = b + c" sera plus lent que "a = b, a += c" car dans le premier cas il y a création d'un objet temporaire qui représente "b + c".
Dire que le C++ est lent ça veut pas dire grand chose tout dépend de ce que fait le programmeur.

Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?
En C++ tout n'est pas objet, et c'est bien la le problème

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.