El estándar C no permite ciertas optimizaciones de estructuras: por ejemplo, reorganización de campos, combinación de campos, descarte campos de los que nunca se lee, elevación de campos fuera de la estructura si pueden convertirse en variables automáticas , etc. Esto es necesario por varias razones, incluyendo diseños de estructuras consistentes en unidades de compilación y permitiendo estructuras compatibles con cast.Optimización de estructura de compilador C
¿Los compiladores modernos (por ejemplo, gcc, clang, Visual C) admiten extensiones que me permiten decir que es ¿Está bien hacer estas optimizaciones?
Naturalmente, solo tendrían sentido para las definiciones que eran locales para una sola unidad de compilación, de modo que el compilador pudiera ver todos los usos posibles de la estructura; y ciertas cosas (como las definiciones de estructura compatibles con conversión mencionadas anteriormente) quedarían inutilizables. Pero para ciertas tareas esto podría ser una optimización muy valiosa.
sí sé que gcc utilizado tener una opción para permitir -fipa-struct-reorg
precisamente esto, pero nunca funcionó muy bien y poco podrido, y finalmente fue llevado a cabo. Pero no sé si ha sido reemplazado por algo. Y no he podido encontrar nada en clang, lo que me sorprende porque podría pensar que este es precisamente el tipo de optimización que el clang habría terminado ...
Would -flto ser capaz de optimizar cosas como esta? –
* podría * ayudar si le da a struct variables clase de almacenamiento 'register', lo que obliga a no confiar en el diseño de la memoria en un nivel de lenguaje; sin embargo, el optimizador debería ser capaz de resolverlo independientemente de la presencia de 'register', y no tengo idea si hace alguna diferencia en la práctica ... – Christoph
No funciona, lamentablemente, pero vale la pena intentarlo --- ejército de reserva. ('register' no es válido en miembros de estructura o variables estáticas, y parece que se ignora en variables automáticas.) –