Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1397 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme allocation memoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme allocation memoire

n°992061
klems
Posté le 24-02-2005 à 09:56:08  profilanswer
 

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)

mood
Publicité
Posté le 24-02-2005 à 09:56:08  profilanswer
 

n°992072
Taz
bisounours-codeur
Posté le 24-02-2005 à 10:12:24  profilanswer
 

ça s'appelle un pool. malloc t'alloue une zone mémoire correctement aligné pour y mettre ce que tu veux.

n°992085
klems
Posté le 24-02-2005 à 10:24:44  profilanswer
 

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.

n°992099
Taz
bisounours-codeur
Posté le 24-02-2005 à 10:33:45  profilanswer
 

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); ?

n°992106
klems
Posté le 24-02-2005 à 10:39:45  profilanswer
 

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
 
 


Message édité par klems le 24-02-2005 à 10:41:45
n°992137
Taz
bisounours-codeur
Posté le 24-02-2005 à 11:06:15  profilanswer
 

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

n°992147
klems
Posté le 24-02-2005 à 11:15:43  profilanswer
 

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.
 
en gros la base ça va être
 
union { Link *next; TaStruct o; }
 
comme ça si c'est pas utilisé tu chaine


 
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).


Message édité par klems le 24-02-2005 à 11:16:03
n°992151
Taz
bisounours-codeur
Posté le 24-02-2005 à 11:17:58  profilanswer
 

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;

n°992155
klems
Posté le 24-02-2005 à 11:21:13  profilanswer
 

Taz a écrit :

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;


 
ah , ben si je fais un truc de ce genre le compilo (ms c++) me geulle un truc du genre illegal redirection :/

n°992157
Taz
bisounours-codeur
Posté le 24-02-2005 à 11:22:00  profilanswer
 

avec des void*, oui ça gueule. par avec des char

mood
Publicité
Posté le 24-02-2005 à 11:22:00  profilanswer
 

n°992159
klems
Posté le 24-02-2005 à 11:23:05  profilanswer
 

ahhhhhhhh, effectivement  :sweat:  
 
je suis un boulet visiblement

n°992196
klems
Posté le 24-02-2005 à 11:55:13  profilanswer
 

mais si je veux faire des pointeurs void* qui pointent sur dautres pointeurs void* ca geulle :sweat:


Message édité par klems le 24-02-2005 à 11:55:27
n°992201
Taz
bisounours-codeur
Posté le 24-02-2005 à 11:56:19  profilanswer
 

normal. Tu ne peux pas faire d'arithmétique avec des void*. Mais avec des char* (ou autre), tu peux.

n°992210
klems
Posté le 24-02-2005 à 11:59:14  profilanswer
 

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


Message édité par klems le 24-02-2005 à 11:59:31
n°992215
KrisCool
“Verbeux„
Posté le 24-02-2005 à 12:02:26  profilanswer
 

klems a écrit :

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


 
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 ..


---------------
Loose Change Lies | Bars | Last.fm
n°992218
klems
Posté le 24-02-2005 à 12:03:45  profilanswer
 

KrisCool a écrit :

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 ..


 
ok je comprend mieux!! (merci pour ton aide au fait :whistle: )
 
Edit :  uhuh j'avais pas vu que tu n'etais pas taz, donc je vous remercie tous les deux ;)


Message édité par klems le 24-02-2005 à 12:16:46

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme allocation memoire

 

Sujets relatifs
Problème sémaphore sous SolarisProblème compilation sur Linux
Problème selection base (débutante que je suis, aidez moi!!)Recherche séquentielle qui pose problème
probleme compatibilité vidéo avec ie, demande d'aide. [JavaScript] Probleme effet sur image - demande aide
[debutant] Probleme d'allocation memoire pour de grands tableauxMmap probleme d allocation memoire d un tableau double entrée
[C++] Probleme d'allocation memoire avec new[PERL] Problème d'allocation de la mémoire
Plus de sujets relatifs à : probleme allocation memoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR