Tło: Kompilator może wstawić dopełnienie do struktury, aby ułatwić jej wyrównanie. To spowoduje, że rozmiar struct będzie większy niż suma rozmiarów jego członków. Ponowne uporządkowanie elementów struktury, aby lepiej się spakować, może usunąć potrzebę kompilatora w taki sposób, aby zredukować strukturę pamięci. Muszę uzyskać te oszczędności w pamięci.Jak znaleźć wszystkie elementy, które można zmniejszyć, zmieniając kolejność ich elementów.
Opcja awaryjna polega na ręcznym sprawdzeniu każdej struktury. Szukam automatycznego podejścia, które może zmniejszyć wysiłek.
Nawet jeśli ogranicza liczbę kontrolek ręcznie, które mogłyby pomóc.
Na przykład proces/narzędzie/etc, które wymienia wszystkie elementy, które są większe niż suma rozmiarów ich elementów, ale nie jest doskonałe, nadal byłoby pomocne, ponieważ ograniczałoby te, które należy ręcznie sprawdzić .
Czy ktoś wie o jakichkolwiek narzędziach, które mogą to zrobić, lub czy ktoś może zaproponować jakieś podejście, które mogłoby pomóc.
p.s. Muszę to zrobić na osadzonej bazie kodu C zawierającej ponad milion linii kodu.
Większość kompilatorów ma opcję ścisłego spakowania struktur - w MSVC++ jest to '/ Zp', na gcc to' -fpack-struct'. Należy pamiętać, że (1) spowoduje to przerwanie kompatybilności ABI z innym kodem i (2) większość procesorów będzie obsługiwać niewyrównane dane uzyskując dostęp wolniej (lub w ogóle w niektórych architekturach). –