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?
5 answers
Ver la familia de funciones memalign.
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.
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."
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...
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?
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