|
Айхрень...
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
|
||||||
Использование #pragma pack(push,1)... pack(pop)27.11.2009, 11:58. Показов 90512. Ответов 51
Метки нет (Все метки)
Добрый день, товарищи.
Задался вопросом о записи в файл структур данных, читал читал в интернете много интересного. Наткнулся на статью, где описан такой вот вариант задания структур:
Я использую структуру с уже определёнными размерами параметров, так что её размер не будет меняться во времени, проверил, у меня всё работает. Но почему же автор всё-таки не рекомендует это использовать??? Может есть ещё интересные варианты? Для записи в файл использую CreateFile, WriteFile (MSDN->System services->File services->file systems->file management)... Заранее благодарю.
0
|
||||||
| 27.11.2009, 11:58 | |
|
Ответы с готовыми решениями:
51
IAR EWARM, непонятное поведение data pragma pack Русские символы NT 4.0+Service pack 6 + Option pack + MS SQL7.0 с СР1251 |
|
|
|
| 11.04.2011, 20:40 | |
|
Почему прикладная программа не работает с железом работает ещё как но использует удобные функции системы а не ввиде 0FEF00E7h абстракцию создаёт понятную нам, парадигма систем облегчение программироавние железа, а не купание в байт кодах. Так же можно сказать про нас что мы с миром не контачим непосредственно а купаемся в абстракциях мозга ЦНС электро-импульсов то что не надо здесь разводить суть вещей...
0
|
|
|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
||
| 11.04.2011, 20:56 | ||
|
про то, что человек, занимающийся драйверами использует эти приемы в прикладных программах у меня не было и слова - заметь использует он эти директивы, когда работает с сетью, а драйвера он пишет для сетевых карт, реализует сетевые протоколы на низком уровне и тп и мне советует их использовать в этих же случаях (если когда придется), и что даже в прикладных программах, отправляющих что-то по сети, лучше тоже пользоваться этими директивами что не пост от Evg, то всегда попытка съязвить и когда я писал предыдущее собщение, то по-любому был уверен, что найдется хотя бы 1 человек, который несмотря на то, что топику уже 2 года, все равно возьмет и ответит - и о да, конечно же я был уверен на 100 %, что это будет Evg - ведь он обязательно найдет за что зацепится и обязательно покажет свою крутость
0
|
||
|
|
|
| 11.04.2011, 21:58 | |
|
__beginner__, если отбросить флуд и эмоции, то что ты этим хотел сказать? И заодно поясни, что имелось в виду под "прям обязательно нужно выравнивать по 1 байту", если уж тебе так хочется почесать языком
1
|
|
|
|
||
| 28.05.2012, 20:22 | ||
|
0
|
||
| 28.05.2012, 20:26 | |
|
а что внутри структуры? другие структуры, внутри которых - другие и т.д.?
все работает, причем надежно, как бомба. если структуру, которую вы привели, "не заключить в данные директивы", то она будет занимать 10 байт (4+4+2), а если заключить - то 7 (1+4+2). и больше ничего за этим не скрывается. тот, кто хочет позднее обратиться к любому полю кроме f1 не по имени, а по смещению, должен точно знать, как структура была определена: "в директивах" или без.
0
|
|
|
|
|
| 28.05.2012, 20:32 | |
|
1
|
|
|
|
||||||
| 28.05.2012, 21:11 | ||||||
|
Наглядный пример для всех кто сомневается
0
|
||||||
|
|
|
| 28.05.2012, 22:02 | |
|
0
|
|
| 28.05.2012, 23:34 | |
|
мы, мне кажется, все трое "говорим параллельно". я не понимаю вообще, в чем проблема и что нужно проверять, при чем здесь winapi в линухе и пр. стою на шланге, короче, sorry ...
все люди действительно умерли, потому что ели огурци?
0
|
|
|
|
||
| 29.05.2012, 06:01 | ||
|
0
|
||
|
|
||||||
| 29.05.2012, 08:51 | ||||||
|
Думаю, что у тебя 32-битная винда и 64-битный линукс. Либо наоборот. В таких случаях когда видишь разные результаты, то первым делом надо смотреть за использованием типа long, т.к. он 32-битный в режиме 32 и 64-битный в режиме 64. Вообще для программы, которая должна работать в режиме 32 и 64, описывая одинаково оду и ту же структуру данных, использование long'а недопустимо. Вернее, использовать можно, но только под макросами
Добавлено через 1 минуту В печать помимо полей нужно распечатать sizeof твоей структуры Добавлено через 38 минут Один из способов выяснения смещений полей внутри структуры - это использование макроса, обычно его называют OFFSETOF (или всякие вариации на эту тему типа __OFFSETOF, __offsetof и т.п.). Результатом работы макроса будет байтовое смещение заданного поля внутри заданной структуры или объединения
1
|
||||||
|
|
|
| 29.05.2012, 11:20 | |
|
Evg, спасибо большое, у меня действительно 32-битный виндовс 7 и 64-битный линукс минт (вы телепат?
)PS: обязательно оставлю отзыв, но чуть позже PPS: сижу значит в блогах и читаю всякие записи, и попадается мне ваша запись про директивы, но там еще не написано про #pragma, уже хотела оставить коммент с просьбой рассказать про эту прагму, но в последний момент передумала и зашла в гугл, который выдал эту тему
0
|
|
|
|
|||
| 29.05.2012, 11:25 | |||
|
1
|
|||
| 29.05.2012, 11:27 | |
|
теперь все ясно. но я бы, если бы передо мной стояла такая задача, начал бы не с того, чтобы "немножко подумать", а с того, "как бы это увидеть". т.е. создал бы такую структуру в обеих системах и вывел бы memory dump. и все увидел бы очень быстро.
0
|
|
| 29.05.2012, 11:27 | |
|
Помогаю со студенческими работами здесь
40
Pack() [function.pack]: Type H: illegal hex digit m in Сделать так чтобы если вводится push выполнялась функция push, если pop то pop Push, Pop push и pop Функции pop и push Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|