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

  FORUM HardWare.fr
  Programmation
  C

  allocation de mémoire alignée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

allocation de mémoire alignée

n°1320674
gee
Bon ben hon
Posté le 08-03-2006 à 02:32:34  profilanswer
 

Salut,
 
je dois écrire une fonction d'allocation de mémoire qui l'alignera suivant la valeur envoyée (avec la fonction free qui va avec bien sûr) mais j'ai du mal à comprendre le principe.
 
J'ai compris le principe de l'alignement (enfin je crois), mais pas encore comment le faire.
Au début je pensais pouvoir faire un truc genre :  
char * ptr = (char *) malloc (size);
puis regarder si ptr est sur une bonne adresse par rapport à l'aligment demandé, et faire quelque chose en suite, mais cela n'a pas l'air d'une bien bonne idée ...
J'ai trouver une source toute faite mais j'ai envie d'apprendre, et de le faire à ma manière ...
Pourtant je ne trouve pas l'illumination
 
Merci bien,

mood
Publicité
Posté le 08-03-2006 à 02:32:34  profilanswer
 

n°1320676
gorila
It's not a bug, it's a feature
Posté le 08-03-2006 à 03:07:59  profilanswer
 

ou interviens tu dans l'histoire?
 
tu dois reecrire malloc et free? ou juste faire en sorte que les pointeurs soient alignes au retour de malloc?
 
car si tel est le cas, malloc te renvois automatiquement des pointeurs alignes en memoire...

n°1320679
gee
Bon ben hon
Posté le 08-03-2006 à 03:19:07  profilanswer
 

Salut,
 
je dois me servir de malloc et free. Par contre les pointeurs sont alignés automatiquement, mais moi j'aurais besoin de les aligner en fonction d'une valeur d'alignement envoyé.

n°1320680
gee
Bon ben hon
Posté le 08-03-2006 à 04:10:25  profilanswer
 

normalement j'ai fini :

Code :
  1. void * aligned_malloc(size_t bytes, size_t alignment)
  2. {
  3.        void *real = malloc(bytes + alignment +sizeof(int));
  4. if (real == NULL)
  5.  return(NULL);
  6. void *aligned = (alignment - (int)(real + sizeof(int)) % alignment) +real+sizeof(int);
  7. printf("%d\n",real);
  8. printf("%d\n",aligned);
  9. *((int *) (aligned - sizeof(int))) = (int)real;
  10. printf("%d\n", *((int *) (aligned - sizeof(int))));
  11. return (aligned);
  12. }
  13. void aligned_free(void * p)
  14. {
  15. free( (void *) (*((int*)(p-sizeof(int)))));
  16. }


Message édité par gee le 08-03-2006 à 05:38:17
n°1320742
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-03-2006 à 10:07:16  profilanswer
 

gee a écrit :

je dois écrire une fonction d'allocation de mémoire qui l'alignera suivant la valeur envoyée (avec la fonction free qui va avec bien sûr) mais j'ai du mal à comprendre le principe.


Ce que tu veux faire n'est pas portable.
 
En effet, soit il s'agit d'un alignement propre à ta machine at dans ce cas, malloc() fourni déjà le bon alignement pour tout type d'objet C possible.
 
Mais si il s'agit d'un alignement 'physique' pour de la DMA ou un composant electronique particulier, par exemple, il faut faiire ton propre allocateur. En effet, les adresses vues de l'utilisateur n'ont absolument rien à voir avec les adresses physiques, du moins sur mes machines avec MMU (c'est le cas quasiment partout, y compris en embarqué).
 
Je pense qu'il y a un problème de conception.  
 
Explique ce que tu veux faire exactement et surtout pourquoi.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1320921
gee
Bon ben hon
Posté le 08-03-2006 à 14:23:07  profilanswer
 

Salut,
oui ce sont des adresses virtuelles je sais :)
je n'ai pas encore exactement compris le but, c'est un exercice qu'on m'a donné à faire. Mais en effet sans comprendre le but ce n'est pas totalement évident ... :)
 
je pense devoir utiliser malloc pour allouer, sauf que malloc alligne en fontcion de la taille de la variable (enfin plus le compilateur mais bon ..) mais là il faut aligner à la demande :)


Message édité par gee le 08-03-2006 à 14:26:00
n°1320953
Taz
bisounours-codeur
Posté le 08-03-2006 à 14:54:52  profilanswer
 

posix_memalign

n°1320963
gee
Bon ben hon
Posté le 08-03-2006 à 15:00:58  profilanswer
 

oui ca rejoint cette fonction, sauf que là il faut que je code l'extension à malloc moi même :). Plus memalign tout court en fait, bien qu'obsolète.


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

  allocation de mémoire alignée

 

Sujets relatifs
Consulter une mémoire partagéeMémoire défaillante chez Internet Explorer !?
allocation en CTaille exe et utilisation memoire programme
Affichage dans la memoire videoGros et bizarre trou de mémoire...
[ASP.NET, VB] Taille mémoire maximum d'un object ?[resolu]stocker des données en memoire
Mémoire insuffisante Help[C/UNIX] Tube + Mémoire partagée
Plus de sujets relatifs à : allocation de mémoire alignée


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