Listes chaînées SANS utiliser Malloc - C - Programmation
Marsh Posté le 05-04-2005 à 22:45:51
salut,
il n'y a peut etre QUE la liste chainee qui doit être faite sans malloc ?
Edit: dans le sens où tu laisses l'utilisateur gérer la mémoire tout seul comme un grand....
Marsh Posté le 05-04-2005 à 22:47:50
Oui, exactement, je dois faire la liste sans malloc, et les autres fonctions allouer désallouer etc... mais ça je pense pouvoir m'en sortir si j'arrive déjà a gérer cette liste noon ?
Marsh Posté le 05-04-2005 à 22:57:43
LOL
Le problème c'est que je vois pas du tout comment je dois faire pour gérer une listes chainées SANS malloc, je sais que je dois passer par une série de pointeur, avec un "réservoir" qui contiendra toujours l'adresse du dernier élément, mais je ne vois pas plus, je vois pas par ou commencer , comment l'appliquer etc....
Tu vois le délire non ?
Marsh Posté le 05-04-2005 à 23:07:54
mogway95 a écrit : je ne dois pas savoir faire de recherche sur le net.. |
C'est le moment d'apprendre
Et dans la charte c'est bien spécifié : pas de résolution d'exercice....
Marsh Posté le 05-04-2005 à 23:13:35
Mouais... c'est pas trés sympa ça !
C'est un exercice, pas un examen ! Et c'est bien pour ça que j'ai deman,der si vous aviez des liens de sites ou des astuces pour que JE puisse chercher et surtout COMPRENDRE ...
Marsh Posté le 05-04-2005 à 23:17:04
oki t'as du bol que les modos soient pas encore passé par là
google -> "liste chainee" et ça roule
Marsh Posté le 05-04-2005 à 23:20:17
merci ! Mais je t'assur que si tu fais ça dans google, tu vas tomber sur tout un tas de page ou ils utilisent MALLOC, et ça , ça ne m'intérrèsse pas...
C'est sans Malloc que je cherche, c'est bien le problème !
Marsh Posté le 05-04-2005 à 23:28:15
Au hasard on va prendre cette page : http://www.commentcamarche.net/c/cliste.php3
Alors bien sur ils y parlent de malloc. Mais cela ne concerne pas la gestion de la liste, uniquement son utilisation. Une liste chainée n'est ni plus ni moins qu'une chaîne de pointeurs (d'où son nom d'ailleurs )...
Marsh Posté le 05-04-2005 à 23:30:36
ok, tu joues sur les mots là... ça j'ai bien compris la suite de pointeurs. mais la fonction Malloc sert a te déplacer etc ? Et ce que je cherche c 'est sans cette fonction, mais si tu sais pas ou ne veut pas laisse couler ...
Marsh Posté le 05-04-2005 à 23:33:32
Dis moi plutôt ce que tu ne comprends pas ou te chiffone dans la page que je t'ai filée
Marsh Posté le 05-04-2005 à 23:38:15
bah en fait, le fait d'utiliser une structure va forcément appeler une utilisation de malloc dérrière... ça négatif, par contre, j'ai trouver ça mais je ne sais pas si c'est correct avec ce que je veux faire, cad créer liste, allouer,désallouer...
http://www.enseignement.polytechni [...] node3.html
Dsl pour le lien si il fonctionne pas....
Marsh Posté le 05-04-2005 à 23:48:53
Si je te suis bien, tu veux faire une liste chainée (et je suppose très fortement le programme de test qui va avec) sans toucher à la mémoire dynamique alors que c'est un outil prévu justement pour aider cette gestion ??
Reprenons, la gestion de la liste se fait sans malloc(et autres) ni free. Il s'agit uniquement de son utilisation, a moins de vouloir faire une liste chainée d'éléments déclarés sur la pile du programme ce qui ne servirait strictement à rien...
Je pense que tu as pris l'expression "sans malloc" un peu trop au pied de la lettre pour l'ensemble de ton exercice....
Marsh Posté le 05-04-2005 à 23:52:53
hum... je t'assure que non, le prof ne veut pas que l'on utilise malloc, il veut que l'on crée cette liste et qu'on l'a gère (ajout, suppression, etc...) en passant par des "réservoirs"... je t'avoue que pour moi c'est trés trés floue... Et je ne vois pas comment gérer tout ça.
Mais sérieusement, si je te saoule avec mon problème dis le , je comprendrais tinquiète ^^
Marsh Posté le 05-04-2005 à 23:54:23
bah ecoute je comprends pas ce qu'il veut ton prof
désolé
Marsh Posté le 05-04-2005 à 23:58:06
LOL
c'est bien ce que je lui ai dis, "je comprends pas " !
Juste pour te donner une idée de l'exercice :
Le titre c'est :
Allocateur dynamique de zones de tailles fixe(listes chainées) : langage C, sans utiliser les fonctionnalités d'allocation dynamique (malloc).
Ensuite on dois gérer : créer liste, supprimer, allouer, désallouer...
Vala, vala, et je t'avoue que je suis complétement à l'ouest ! ^^
Marsh Posté le 06-04-2005 à 00:08:20
je dirais qu'il faut te faire un pool de structures, cad un tableau de structures non initialisées et aller piocher dans ce tableau au lieu de faire des mallocs.
Marsh Posté le 06-04-2005 à 00:10:16
par hazard il voudrait pas que vous simuliez la mémoire dans un gros tableau avec plein de structure dedans et une gestion des cases alloué / vides / toussa ?
Marsh Posté le 06-04-2005 à 00:10:46
oki ! une info à explorer ! Merci beaucoup ! Tableau de structures, c'est noter et je m'y mets dés demain car là,je t'avoue que je suis rinçé et vais me coucher ! En tout cas je te remercie pour ta patience et ton aide ! ^^
A plus tard peut être !?
Marsh Posté le 06-04-2005 à 00:11:10
Mais est-ce que c'est rééllement utile/utilisé cette méthode de liste chainée ??
Edit : mogway : désolé j'avais vraiment pas compris
Marsh Posté le 06-04-2005 à 00:12:40
ah, alors là ? l'utilité n'est pas son but je pense ! dans la classe, on a tous poser cette question, pkoi ne pas utiliser les outils que le langage mets a notre dispo.
Réponse du saint père le prof : POUR QUE VOUS COMPRENIEZ !
c'est facil ....
Marsh Posté le 06-04-2005 à 00:13:38
mogway95 a écrit : oki ! une info à explorer ! Merci beaucoup ! Tableau de structures, c'est noter et je m'y mets dés demain car là,je t'avoue que je suis rinçé et vais me coucher ! En tout cas je te remercie pour ta patience et ton aide ! ^^ |
et le tableau tu l'alloues comment
#define N 100000
Chainon tab[N] ?
Marsh Posté le 06-04-2005 à 00:15:39
comme ça là je ne sais pas...
J'approfondirais le sujet demain là, car je tiens plus... en tout cas merci et surtout passez une bonne nuit !
Marsh Posté le 06-04-2005 à 00:19:14
IrmatDen a écrit : Mais est-ce que c'est rééllement utile/utilisé cette méthode de liste chainée ?? |
Ca permet de faire une grosse allocation au début, dans une appli multitaches si toutes les taches utilisent des pools et que tes pools sont bien dimensionnés, ca permet de detecter un problème de mémoire dès le début de l'execution et pas 5 ans après quand deux taches auront envie de faire des gros malloc simultanément.
Ca permet aussi de gérer une saturation des pools avant de sortir une grosse erreur sur echec d'allocation.
Marsh Posté le 06-04-2005 à 00:23:55
ah oui j'étais loin de penser à tout ça !! merci de l'info
Marsh Posté le 06-04-2005 à 00:47:06
Taz a écrit : et le tableau tu l'alloues comment |
bah tu sais c'est un exo, c'est des profs toussa
Marsh Posté le 06-04-2005 à 01:14:58
pinguin007 a écrit : bah tu sais c'est un exo, c'est des profs toussa |
à part la connerie, je ne vois pas ce qui peux justifier ce genre de trucs. Ah si, l'envie d'une stack overflow au lancement du programme.
Marsh Posté le 06-04-2005 à 04:38:25
Taz a écrit : à part la connerie, je ne vois pas ce qui peux justifier ce genre de trucs. |
Ben par exemple si tu as besoin d'écrire un allocateur. Et que ton algo d'allocation/désallocation utilise une liste chainée.
La question c'est comment gérer ça sans que l'allocateur ait à s'appeler lui-même.
Marsh Posté le 06-04-2005 à 08:39:29
mogway95 a écrit : Voilà, j'ai un exercice a faire et j'avaoue ne pas savoir par quel bout le prendre .... |
Il suffit de créer un 'pool' statique et de gérer l'allocation à la main. Ca implique que les noeud de la liste chainée aient une taille fixe et qu'ils soient linéaires. Pas très efficace, et anti-généricité...
Je ne vois pas trop l'intérêt à part apporter une reflexion sur ce qu'est un allocateur de ressources... Pourquoi pas...
Marsh Posté le 06-04-2005 à 09:16:15
Taz a écrit : à part la connerie, je ne vois pas ce qui peux justifier ce genre de trucs. Ah si, l'envie d'une stack overflow au lancement du programme. |
J'ai déjà fait ça dans ma tendre jeunesse, pour une utilisation très très marginale: quand on souhaite écrire du code qui n'utilise pas la lib standard (pas de malloc, de printf, etc.).
Ca permet de gérer soi-même toute la mémoire qu'on utilise sans avoir à dépendre d'un appel particulier pour obtenir la-dite mémoire (en fait, c'est le couple linker/loader qui fait tout le boulot). Ca permet donc d'avoir des executables plus petits, et également d'utiliser des addresses immédiates (ça c'est vraiment de bas niveau), plutôt que d'avoir à déréférencer des pointeurs. Ca m'étonnerais même pas que quelques virus fonctionnent comme ça d'ailleurs.
Marsh Posté le 06-04-2005 à 11:00:09
non, ce que je veux dire, c'est que la formulation est stupide. Faire une simulation de pointeur dans un tableau (on référence pas avec un pointer, mais avec un indice), ça je comprends, c'est un exercice scolaire, j'en ai fait. Mais dire "sans malloc" ... ça veut rien dire. malloc c'est juste une façon d'obtenir de la mémoire, en grande quantité.
Lam's > rien à voir.
Marsh Posté le 06-04-2005 à 12:10:34
Emmanuel Delahaye a écrit : Il suffit de créer un 'pool' statique et de gérer l'allocation à la main. Ca implique que les noeud de la liste chainée aient une taille fixe et qu'ils soient linéaires. Pas très efficace, et anti-généricité... |
sans malloc ça veut dire que la chaîne restera "vide" de toute donnée stockée en mémoire, y'aura que la gestion des adresses à faire...
Par contre utiliser un grand tableau pour le faire, bah c bidon parce qu'une liste chaînée n'est po contigüe en mémoire... Faut ptet simuler ça justement...
Ton prof vous a donné un cas d'utilisation de votre programme ? Ou ça reste pure "théorie" ?
Marsh Posté le 06-04-2005 à 15:41:04
Taz a écrit : non, ce que je veux dire, c'est que la formulation est stupide. Faire une simulation de pointeur dans un tableau (on référence pas avec un pointer, mais avec un indice), ça je comprends, c'est un exercice scolaire, j'en ai fait. Mais dire "sans malloc" ... ça veut rien dire. malloc c'est juste une façon d'obtenir de la mémoire, en grande quantité. |
Spoiler : |
Marsh Posté le 06-04-2005 à 18:12:09
L'utilité de ce type de fonctionnement (pas d'allocation dynamique) réside le fait que le programme demarre et requisitionne une fois pour toute la mémoire nécessaire.
On ne se retourve jamais dans le cas "plus de memoire dispo".
=> Fiabilité
=> Pas de gestion d'erreur d'allocation mémoire.
Evidement c'est gourmand en mémoire !
A+
Marsh Posté le 06-04-2005 à 18:38:52
Emmanuel > j'aime bien ta façon de coder, mais des fois j'ai l'impression que tu fais le concours de l'indentation la plus profonde et puis des fois, y a des virgules en début de ligne, c'est pas tip top
/* private variables =================================================== */
mem_s G;
ben pourquoi elle est pas static ?
Marsh Posté le 06-04-2005 à 19:50:18
Taz a écrit : Emmanuel > j'aime bien ta façon de coder, mais des fois j'ai l'impression que tu fais le concours de l'indentation la plus profonde et puis des fois, y a des virgules en début de ligne, c'est pas tip top |
En fait, c'est logique. J'ai un peu lancé cette mode sur certains forums Usenet et c'est repris petit à petit.. En effet, dans une liste de paramètres, la virgule appartient au paramètre suivant (le premier n'en a pas) :
p1 [, p2[, p3[, p4[,*]]]]
Il est donc logique de coder comme ça si il y a beaucoup de paramètres :
p1
, p2
, p3
, p4
les virgules sont alors automatiquement alignées par l'intendeur, ça facilite la maintenance par copié-collé...
Bref, c'est pas un gros problème...
Citation : |
Petit oubli... Voilà, c'est corrigé.
Marsh Posté le 05-04-2005 à 22:43:14
Bonsoir tout l'monde !
Voilà, j'ai un exercice a faire et j'avaoue ne pas savoir par quel bout le prendre ....
Je m'explique, je dois coder en C une gestion de liste chaînée mais SANS utiliser la fonction Malloc, bizarre me direz vous ... c'est ce que j'ai dis aussi, on m'a rétorquer, "cest facil" !
Mais pas plus de réponses....bref, je cherche depuis quelques jours sans grand succés(je ne dois pas savoir faire de recherche sur le net..).
Pourriez vous m'indiquer deux trois astuces ou une adresse de site qui traite du sujet plizzz ?
Merci beaucoup.