significado fun flais churin churi calle amlo c gcc padding c99 memory-alignment

fun - ¿Hay una palabra clave GCC para permitir el reordenamiento de la estructura?



churin churin fun flais calle 13 (3)

Sé por qué GCC no reordena a los miembros de una estructura por defecto, pero rara vez escribo código que dependa del orden de la estructura, entonces ¿hay alguna forma en que pueda marcar mis estructuras para que sean reordenadas automáticamente?


Las versiones anteriores de GCC tienen la -fipa-struct-reorg para permitir el reordenamiento de estructura en -fwhole-program + -combine mode.

  • -fipa-struct-reorg
    Realice una optimización de la reorganización de la estructura, que cambie el diseño de las estructuras tipo C para utilizar mejor la localidad espacial. Esta transformación es afectiva para los programas que contienen matrices de estructuras. Disponible en dos modos de compilación: basado en perfil (habilitado con -fprofile-generate ) o estático (que usa heurística incorporada). Requiere -fipa-type-escape para proporcionar la seguridad de esta transformación. Funciona solo en el modo de programa completo, por lo que requiere -fwhole-program y -combine para ser habilitado. Las estructuras consideradas ''cold'' por esta transformación no se ven afectadas (consulte --param struct-reorg-cold-struct-ratio=value ).

Se eliminó desde GCC 4.8.x debido a los motivos siguientes en la nota de la versión

Se han eliminado las optimizaciones struct reorg y matrix reorg (opciones de línea de comandos -fipa-struct-reorg y -fipa-matrix-reorg ). No siempre funcionaban correctamente, ni trabajaban con la optimización de tiempo de enlace (LTO), por lo tanto, solo se aplicaban a programas que constaban de una sola unidad de traducción.

Sin embargo, aún puede probar la struct-reorg-branch en GCC SVN bajo su propio riesgo, ya que todavía está en desarrollo activo.


Creo que es posible reorganizar / dividir elementos de struct cuando está compilando todo el programa (lto mode, use -flto flag). En ese caso, tiene una imagen completa del programa y, para los símbolos que no se escapan, debería ser posible reordenarlos para un mejor comportamiento del caché, etc.

En el tronco gcc esto está bajo desarrollo activo. Esto fue presentado en el cauldron de GNU 2015. Es posible que desee probar gcc trunk o struct-reorg-branch.

https://gcc.gnu.org/wiki/cauldron2015?action=AttachFile&do=view&target=Olga+Golovanevsky_+Memory+Layout+Optimizations+of+Structures+and+Objects.pdf


No existe tal opción en GCC. Y, estoy seguro, no puede ser presentado de manera sensata. Acerca de las optimizaciones de relleno, consulte esta discusión .

La única excepción que conozco es la división de campos de estructuras de frío / calor, que puede hacerse en algunos casos (aún no estoy seguro, que GCC pueda hacerlo incluso en modo guiado por perfiles, sé que ICC puede). Esta característica no está bajo el control del usuario y se realiza en gráficos de llamadas donde se puede demostrar el carácter conservador de dicha transformación sobre el flujo de datos.