alineado malloc () en GCC?


¿Hay alguna función estandarizada en GCC o glibc para asignar bloque de memoria en puntero alineado? Como _align_malloc () en MSVC?

 32
Author: sigjuice, 2010-10-01

5 answers

Ver la familia de funciones memalign.

 28
Author: sigjuice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 14:12:23

Desde que se hizo la pregunta, una nueva función fue estandarizada por C11:

void *aligned_alloc(size_t alignment, size_t size);

Y está disponible en glibc (no en windows (que yo sepa). Toma sus argumentos en el mismo orden que memalign, el reverso de _aligned_malloc de Microsoft, y usa la misma función free como de costumbre para la desasignación.

 25
Author: Marc Glisse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-31 22:01:20

El [posix_memalign()][1] función proporciona asignación de memoria alineada y ha estado disponible desde glibc 2.1.91.

Pero no necesariamente con otros compiladores: citando el estándar "La función posix_memalign () es parte de la opción Advisory Information y no necesita ser proporcionada en todas las implementaciones."

 19
Author: jschmier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-26 21:09:07

Hay _mm_malloc y _mm_free que son compatibles con la mayoría de los compiladores del mundo x86/x64, con al menos:

  • ccg
  • MinGW (gcc win32/win64)
  • MSVC
  • clang
  • ICC

AFAIK, estas funciones no son un estándar en absoluto. Pero es que yo sepa los más apoyados. Otras funciones son más específicas del compilador:

  • _aligned_malloc es solo MSVC y MinGW
  • las funciones posix memalign no son soportadas por al menos MSVC

También hay funciones estándar de C11, pero desafortunadamente no están en c++11, y incluirlas en c++ requiere definiciones de preprocesador no estándar...

 9
Author: galinette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-25 18:11:09

Depende de qué tipo de alineación se espera. ¿Quieres una alineación más estricta, o una alineación más relajada?

malloc por definición se garantiza devolver un puntero que esté correctamente alineado para almacenar cualquier tipo estándar en el programa C (y, por lo tanto, cualquier tipo construido a partir de tipos estándar). ¿Es lo que estás buscando? O ¿necesitas algo diferente?

 4
Author: AnT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 15:35:16