probleme allocation memoire - C - Programmation
Marsh Posté le 24-02-2005 à 10:12:24
ça s'appelle un pool. malloc t'alloue une zone mémoire correctement aligné pour y mettre ce que tu veux.
Marsh Posté le 24-02-2005 à 10:24:44
ah t'a l'air de ty connaitre , mais le probleme c'est que je ne sais pas comment definir des pointeurs dans cette zone memoire.
Marsh Posté le 24-02-2005 à 10:33:45
déjà dans ton sujet : est-ce que le type de objets du pool est connu à la compilation ou bien est-ce que tu vas instancier
new_pool(taille_objet); ?
Marsh Posté le 24-02-2005 à 10:39:45
oué le type est connu (enfin la taille du type l'est)
edit : attends, t'embettes pas, je crois que j'avais mal compris le sujet... je pense pas avoir a faire ca en fin de compte
Marsh Posté le 24-02-2005 à 11:06:15
bah moi si, je comprends ça : un allocateur rapide pour une série d'objet de même taille, taille connue à la compilation.
en gros la base ça va être
union { Link *next; TaStruct o; }
comme ça si c'est pas utilisé tu chaine
Marsh Posté le 24-02-2005 à 11:15:43
Taz a écrit : bah moi si, je comprends ça : un allocateur rapide pour une série d'objet de même taille, taille connue à la compilation. |
oué je comprend mais je dois etre bete (le C c'est vraiment pas mon truc, je suis plutot C# et Java) : je vois toujours pas comment definir mes pointeurs dans ma zone allouée. J'ai chercher a comprendre ton histoire de pool via google mais je trouve rien qui parle de pool en C (la plupart des liens traitent de bases de données).
Marsh Posté le 24-02-2005 à 11:17:58
moi je comprends pas ce que tu n'arrives pas à comprendre
quand tu as
char *p = malloc(100);
si tu as envie, tu peux faire
char *q = p + 50;
Marsh Posté le 24-02-2005 à 11:21:13
Taz a écrit : moi je comprends pas ce que tu n'arrives pas à comprendre |
ah , ben si je fais un truc de ce genre le compilo (ms c++) me geulle un truc du genre illegal redirection
Marsh Posté le 24-02-2005 à 11:55:13
mais si je veux faire des pointeurs void* qui pointent sur dautres pointeurs void* ca geulle
Marsh Posté le 24-02-2005 à 11:56:19
normal. Tu ne peux pas faire d'arithmétique avec des void*. Mais avec des char* (ou autre), tu peux.
Marsh Posté le 24-02-2005 à 11:59:14
ah...
donc je suis plus ou mions dans la deche.Si je fait un pointeur char* ca va forcement pointer sur un char non? moi je veux pointer sur un autre pointeur d'adresse
Marsh Posté le 24-02-2005 à 12:02:26
klems a écrit : ah... |
Alors je suppose qu'il faudra un cast.
Le problème d'un pointer void*, c'est que comme le type n'est pas connu, la taille de la donnée en mémoire n'est pas connue non plus, ce qui fait que tu ne peux pas incrémenter ou décrémenter ton pointeur, ça n'aurait pas de sens.
Avec un char* dont la donnée fait 1 octet (modulo les architectures exotiques), tu peux te déplacer octet par octet dans l'espace mémoire en incrémentant ou en décrémentant ton pointeur.
Ensuite à toi de le caster dans le bon type ..
Marsh Posté le 24-02-2005 à 12:03:45
KrisCool a écrit : Alors je suppose qu'il faudra un cast. |
ok je comprend mieux!! (merci pour ton aide au fait )
Edit : uhuh j'avais pas vu que tu n'etais pas taz, donc je vous remercie tous les deux
Marsh Posté le 24-02-2005 à 09:56:08
Bonjour,
je suis en licence info et g un petit td a faire (ex3 du td2 ici pour ceux que ca interessent : http://dept-info.labri.fr/~fortin/ens/PS/sujets/TD2/)
mon probleme est le suivant est-il possible d'allouer une zone memoire avec malloc et de s'en servir a sa guise apres. En effet j'aimerais y metre des pointeurs de type void* a des endroits bien precis de cette zone memoire (se pointant dailleur entre eux mais c'est pas le probleme).
j'ai penssais a une solution qui consisterait a declarer une copie du pointeur normalement puis via un memcpy je le replacerai dans ma zone memoire à l'endroit voulu. je vais essayer ca mais je post a tout hazar (peut etre que malloc n'est pas la fonction a utiliser)