Понятно, с выравниванием борются. Вот только не понял, почему разрывы автор заполняет массивами байтов, а не uint, скажем
Только зачем с линкёром страдать ... когда можно при инициализации, указателю адрес устройства присвоить, а если их много, то указателям в другой структуре.