2009-10-08 11 views
5

C# dostarcza StructLayoutAttribute.Pack, ale jego zachowanie jest "każdy członek dostaje co najmniej określone wyrównanie, czy tego chce, czy nie", podczas gdy zachowanie #pragma pack w C++ to "każdy członek otrzymuje wyrównanie, które chce, chyba że to chce więcej niż określone wyrównanie, w którym to przypadku nie ma gwarancji, aby uzyskać więcej niż to ".Czy C# ma odpowiednik pakietu #pragma w C++?

Czy istnieje sposób, aby spowodować, że układ struktury w języku C# będzie taki sam jak układ podobnej struktury w C++ z określonym pakietem #pragma, z wyjątkiem użycia StructLayout (LayoutKind.Explicit) i FieldOffset w każdym członek lub wstawianie nieużywanych członków dopełniających?

+0

Czy możesz podać przykład kodu ilustrujący różnicę, którą widzisz i dlaczego powoduje problem? StructLayout.Pack zawsze zaspokajał moje potrzeby. –

Odpowiedz

6

Po eksperymentach z StructLayout.Pack wygląda na to, że faktycznie robi dokładnie to samo, co pakiet #pragma w C++. Przekonanie, że dokumentacja MSDN dla StructLayout.Pack (która twierdziła, że ​​zachowanie opisane w moim oryginalnym poście) było błędem.