Показано с 1 по 10 из 17

Тема: Работа "POINTER TO" обрывает связь

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #17
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    я как раз рассчитывал на булеву переменную в начале объявления, которая создаст смещение на байт и не даст выполнится кратности для массива. Но оказалось, что совместно с интом она выравняла как раз кратно 4, тогда почему это не сделал добавленный байт
    Потому что выравнивается каждая (!) переменная соответственно своему типу. Если добавленный байт смещает всё после себя, то смещается всё опять же с выравниванием. Указатели сами по себе 32-битные, и поэтому следующий за outPtr массив stuff окажется на кратном 32 битам адресе. Например, было:
    DWORD - адрес 0
    DWORD - адрес 4
    ARRAY OF BYTE - адрес 8
    Поставим байт в начале:
    BYTE - 0
    DWORD - 4
    DWORD - 8
    ARRAY OF BYTE - 12
    Заметьте, что массив остался выровнен, а на адресах 1-3 образовалась дырка. Попробуем переставить байт к массиву:
    DWORD - 0
    DWORD - 4
    BYTE - 8
    ARRAY OF BYTE - 9
    Вот теперь массив на некратном четырём адресе. Но можно поменять тип массива:
    DWORD - 0
    DWORD - 4
    BYTE - 8
    ARRAY OF REAL - 12
    Теперь дыра на 9, 10 и 11. Такие дела.
    Последний раз редактировалось Yegor; 16.07.2016 в 20:56.

Похожие темы

  1. Ответов: 16
    Последнее сообщение: 15.02.2017, 11:39
  2. Ответов: 4
    Последнее сообщение: 11.04.2016, 13:54
  3. Ответов: 1
    Последнее сообщение: 15.01.2016, 14:59
  4. Ответов: 20
    Последнее сообщение: 15.04.2015, 11:02
  5. ПЛК110 Самопроизвольное выключение режима "Работа"
    от ОАО"Органика" в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 20.12.2011, 10:19

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •