web-dev-qa-db-fra.com

malloc aligné () dans GCC?

Existe-t-il une fonction standardisée dans GCC ou glibc pour allouer le bloc de mémoire au pointeur aligné? Comme _ align_malloc () dans MSVC?

36
Dennis Yurichev

Voir la famille de fonctions memalign .

29
sigjuice

Depuis la question posée, une nouvelle fonction a été normalisée par C11:

void *aligned_alloc(size_t alignment, size_t size);

et il est disponible en glibc (pas sur les fenêtres pour autant que je sache). Il prend ses arguments dans le même ordre que memalign, l'inverse de _aligned_malloc De Microsoft, et utilise la même fonction free que d'habitude pour la désallocation.

Une différence subtile est que aligned_alloc Nécessite que size soit un multiple de alignment.

29
Marc Glisse

La fonction [posix_memalign()] [1] fournit une allocation de mémoire alignée et est disponible depuis la glibc 2.1.91.

Mais pas nécessairement avec d'autres compilateurs: citer la norme "La fonction posix_memalign () fait partie de l'option Advisory Information et n'a pas besoin d'être fournie sur toutes les implémentations."

19
jschmier

Il y a _mm_malloc et _mm_free qui sont pris en charge par la plupart des compilateurs du monde x86/x64, avec au moins:

  • gcc
  • MinGW (gcc win32/win64)
  • MSVC
  • bruit
  • ICC

AFAIK, ces fonctions ne sont pas du tout standard. Mais ce sont à ma connaissance les plus soutenus. D'autres fonctions sont plus spécifiques au compilateur:

  • _aligned_malloc est MSVC et MinGW uniquement
  • les fonctions de mémix posix ne sont pas prises en charge par au moins MSVC

Il existe également des fonctions standard C11 mais malheureusement elles ne sont pas en c ++ 11, et les inclure en c ++ nécessite des définitions de préprocesseur non standard ...

11
galinette

Cela dépend du type d'alignement que vous attendez. Voulez-vous un alignement plus strict ou un alignement plus détendu?

malloc par définition est garanti pour retourner un pointeur qui est correctement aligné pour stocker tout type standard dans le programme C (et, par conséquent, tout type construit à partir de types standard). Est-ce ce que vous recherchez? Ou avez-vous besoin de quelque chose de différent?

4
AnT