Оптимизация размера структур в Visual Studio
От: Аноним  
Дата: 17.07.06 10:13
Оценка:
В двух файлах проекта юзается одна и та же структура. В первом файле ее размер определяется как 7, во втором как 8. Видимо, во втором файле включена какая-то оптимизация и под первый член структуры, который имеет тип UINT8 выделяется не байт, а два (поди, какое-нибудь выравнивание). Проблема в том, что из второго файла эта структура передается в первый через memcpy, т.е. по памяти. Естественно, в первом файле структура читается не корректно. Люди, может кто-нибудь знает что-нибудь об этой оптимизации? Где она включается и как ее можно включить или отключить???
Re: Оптимизация размера структур в Visual Studio
От: Cyberax Марс  
Дата: 17.07.06 10:17
Оценка:
Аноним wrote:
> В двух файлах проекта юзается одна и та же структура. В первом файле ее
> размер определяется как 7, во втором как 8. Видимо, во втором файле
> включена какая-то оптимизация и под первый член структуры, который имеет
> тип UINT8 выделяется не байт, а два (поди, какое-нибудь выравнивание).
Читать про #pragma pack в MSVC.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re: Оптимизация размера структур в Visual Studio
От: zaufi Земля  
Дата: 17.07.06 10:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В двух файлах проекта юзается одна и та же структура. В первом файле ее размер определяется как 7, во втором как 8. Видимо, во втором файле включена какая-то оптимизация и под первый член структуры, который имеет тип UINT8 выделяется не байт, а два (поди, какое-нибудь выравнивание). Проблема в том, что из второго файла эта структура передается в первый через memcpy, т.е. по памяти. Естественно, в первом файле структура читается не корректно. Люди, может кто-нибудь знает что-нибудь об этой оптимизации? Где она включается и как ее можно включить или отключить???


не надо завязываться на ключики компилятора -- надо дизайнить структуры такми образом чтоб она при любых глючиках любого компилятора компилилась бы в однакового размера и содержания данные.

для этого надо применять соответствуюшщие типы данных (intN_t/uintN_t) и знать правила по которым делается выравнивание...
Re[2]: Оптимизация размера структур в Visual Studio
От: Cyberax Марс  
Дата: 17.07.06 10:38
Оценка: 1 (1) +1
zaufi wrote:
> не надо завязываться на ключики компилятора -- надо дизайнить структуры
> такми образом чтоб она при любых глючиках любого компилятора компилилась
> бы в однакового размера и содержания данные.
Неправильно.

Во-первых, правила выравнивания разные для разных платформ (x86, Itanium
и т.п.).
Во-вторых, разные компиляторы все равно могут выравнивать по-разному.

Если хочется писать переносимый софт — то надо использовать текстовую
сериализацию или бинарную сериализацию с контролируемым форматом.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Оптимизация размера структур в Visual Studio
От: zaufi Земля  
Дата: 17.07.06 10:46
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>zaufi wrote:

>> не надо завязываться на ключики компилятора -- надо дизайнить структуры
>> такми образом чтоб она при любых глючиках любого компилятора компилилась
>> бы в однакового размера и содержания данные.
C>Неправильно.

C>Во-первых, правила выравнивания разные для разных платформ (x86, Itanium

C>и т.п.).
C>Во-вторых, разные компиляторы все равно могут выравнивать по-разному.

тем неменее задача сделать структуру компилябельную на требуемых платформах (и компиляторах) в одно и тоже вполне решаемая
как правило этого достаточно в типичном проекте...

C>Если хочется писать переносимый софт — то надо использовать текстовую

C>сериализацию или бинарную сериализацию с контролируемым форматом.

+1
(переносимый на неизвестное количество платформ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.