В двух файлах проекта юзается одна и та же структура. В первом файле ее размер определяется как 7, во втором как 8. Видимо, во втором файле включена какая-то оптимизация и под первый член структуры, который имеет тип UINT8 выделяется не байт, а два (поди, какое-нибудь выравнивание). Проблема в том, что из второго файла эта структура передается в первый через memcpy, т.е. по памяти. Естественно, в первом файле структура читается не корректно. Люди, может кто-нибудь знает что-нибудь об этой оптимизации? Где она включается и как ее можно включить или отключить???
Аноним wrote: > В двух файлах проекта юзается одна и та же структура. В первом файле ее > размер определяется как 7, во втором как 8. Видимо, во втором файле > включена какая-то оптимизация и под первый член структуры, который имеет > тип UINT8 выделяется не байт, а два (поди, какое-нибудь выравнивание).
Читать про #pragma pack в MSVC.
Здравствуйте, Аноним, Вы писали:
А>В двух файлах проекта юзается одна и та же структура. В первом файле ее размер определяется как 7, во втором как 8. Видимо, во втором файле включена какая-то оптимизация и под первый член структуры, который имеет тип UINT8 выделяется не байт, а два (поди, какое-нибудь выравнивание). Проблема в том, что из второго файла эта структура передается в первый через memcpy, т.е. по памяти. Естественно, в первом файле структура читается не корректно. Люди, может кто-нибудь знает что-нибудь об этой оптимизации? Где она включается и как ее можно включить или отключить???
не надо завязываться на ключики компилятора -- надо дизайнить структуры такми образом чтоб она при любых глючиках любого компилятора компилилась бы в однакового размера и содержания данные.
для этого надо применять соответствуюшщие типы данных (intN_t/uintN_t) и знать правила по которым делается выравнивание...
Re[2]: Оптимизация размера структур в Visual Studio
zaufi wrote: > не надо завязываться на ключики компилятора -- надо дизайнить структуры > такми образом чтоб она при любых глючиках любого компилятора компилилась > бы в однакового размера и содержания данные.
Неправильно.
Во-первых, правила выравнивания разные для разных платформ (x86, Itanium
и т.п.).
Во-вторых, разные компиляторы все равно могут выравнивать по-разному.
Если хочется писать переносимый софт — то надо использовать текстовую
сериализацию или бинарную сериализацию с контролируемым форматом.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Оптимизация размера структур в Visual Studio
Здравствуйте, Cyberax, Вы писали:
C>zaufi wrote: >> не надо завязываться на ключики компилятора -- надо дизайнить структуры >> такми образом чтоб она при любых глючиках любого компилятора компилилась >> бы в однакового размера и содержания данные. C>Неправильно.
C>Во-первых, правила выравнивания разные для разных платформ (x86, Itanium C>и т.п.). C>Во-вторых, разные компиляторы все равно могут выравнивать по-разному.
тем неменее задача сделать структуру компилябельную на требуемых платформах (и компиляторах) в одно и тоже вполне решаемая
как правило этого достаточно в типичном проекте...
C>Если хочется писать переносимый софт — то надо использовать текстовую C>сериализацию или бинарную сериализацию с контролируемым форматом.
+1
(переносимый на неизвестное количество платформ)