Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| TarasBer |
12.12.2007 20:53
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Поиск использовал, не нашёл ничего.
Я вот описал класс, и там были в числе прочих, где-то внутри огромного списка переменных такие строчки:
В другом модуле я описал структуру:
И завел переменную - указатель на неё:
Значит у меня много переменных вышеописанного класса, и общение программы с модулем происходит именно через вот этот самый Attr таким образом:
Я предполагаю, что в объекте данные, описанные подряд, находятся тоже подряд, и поэтому, присвоив указатель таким способом, я автоматически получаю соответствие между одноимёнными переменными. Но меня постиг облом. Так выходит, что DoorState <> Attr.DoorState; Я очень этому удивился, и прогнал программу, просмотрев в Watches значения указателей на переменные. И оказалось, что вот те булевские переменные идут в памяти подряд, одна за другой с шагом в 1 байт, а вот DoorState почему-то отстоит от IsNight на 2 байта! Так вот, какой быстрый способ присвоения этого Attr вы посоветуете? Или как настроить компилятор, чтобы данные располагались как положено? -------------------- |
![]() ![]() |
| andriano |
12.12.2007 23:00
Сообщение
#2
|
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Компилято располагает переменные так, чтобы процессор имел к ним доступ ЗА ОДНУ операцию.
Для однобайтовых величин - это всегда так. Для многобайтовых - нет, зависит от выравнивания. |
TarasBer Расположение данных в объекте. 12.12.2007 20:53
volvo Выравнивание на сколько стоит?
Если добавить {... 12.12.2007 21:08
TarasBer Выравнивание - по 8... Странно, а почему булевские... 12.12.2007 21:50![]() ![]() |
|
Текстовая версия | 8.12.2025 23:37 |