1 | |||||||||||||||||||||
компоновка полей struct в памяти11.11.2010, 06:08. Показов 2572. Ответов 1
Метки нет (Все метки)
Подскажите ленивому тупому, которому лень Страустрапа почитать, как компонуются поля структуры в памяти?
Меня интересует конкретный пример. Есть библиотечная структура
1)
2)
"Никогда-никогда, никогда-никогда..." (с) с порядком расположения её полей в памяти ничего не произойдёт и я, например, смогу также зачитывать из битовых файлов в void* и заполнять её memcpy? Заранее благодарен за конструктивные ответы.
0
|
11.11.2010, 06:08 | |
Ответы с готовыми решениями:
1
Компоновка полей Количество памяти на union и struct Вывести данные из полей переменной типа struct, когда частью данных является массив Как открыть struct в struct |
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
11.11.2010, 08:54 | 2 | |||||
Не можешь.
Причин тут две: 1. У всех известных мне современных компиляторов C и С++ существует такая фича, как выравнивание (alignment) данных - и полей структур в том числе. При этом, для различных компиляторов это выравнивание может оказаться разным, - т.е. если твоя программа была скомпилирована Компилятором1, и записала структуру в файл как raw data (просто поток байтов), а потом перекомпилирована другим Компилятором2, и попыталась прочесть все те же данные, - ты можешь получить верные данные, а можешь получить бред....... Потому что выравнивание может оказаться разным, а может одинаковым, - как карта ляжет. Можно победить, насильственно указав компилятору желаемое выравнивание:
2. Существует еще такая штука, как архитектуры big-endian и little-endian - попросту говоря, различный порядок байтов в многобайтовых переменных (int, etc...). Так вот, для различных процессоров этот порядок лехко может оказаться разным, и при переносе файла данных между различными машинами (по сети, или еще каким-то способом....) ты гарантированно получишь бред. А так - да, если программа компилируется одним и тем же компилятором, с одними и теми же опциями, и гарантированно работает на машинах одной и той же архитектуры, - да, можешь быть уверен. Компилятор не будет самовольно переставлять поля структур, их последовательность в памяти будет всегда одной и той же.
2
|
11.11.2010, 08:54 | |
11.11.2010, 08:54 | |
Помогаю со студенческими работами здесь
2
Struct sockaddr vs. struct sockaddr_in Расположение полей структуры в памяти Расположение полей структуры в памяти Расположение в памяти полей и методов класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |