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?
Voir la famille de fonctions memalign .
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
.
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."
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:
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:
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 ...
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?