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




Ответить с цитированием
