Почему фактический размер массива больше определенного?

Мне нужно узнать смещение до поля PPEB_LDR_DATA Ldr; структуры процесса PEB:

typedef struct _PEB {
    BYTE Reserved1[2];
    BYTE BeingDebugged;
    BYTE Reserved2[1];
    PVOID Reserved3[2];
    PPEB_LDR_DATA Ldr;
    PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
    PVOID Reserved4[3];
    PVOID AtlThunkSListPtr;
    PVOID Reserved5;
    ULONG Reserved6;
    PVOID Reserved7;
    ULONG Reserved8;
    ULONG AtlThunkSListPtr32;
    PVOID Reserved9[45];
    BYTE Reserved10[96];
    PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
    BYTE Reserved11[128];
    PVOID Reserved12[1];
    ULONG SessionId;
} PEB, *PPEB;

Если посчитать размер всех полей до поля Ldr, то это получается 20, но если я получаю размер через разность адресов (DWORD64)&(pPeb->Ldr)- (DWORD64)pPeb, то получаю 24. Как оказалось, поле BYTE Reserved2[1]; имеет размер не 1 байт, а 5 байт. Хотя если получать его размер так: sizeof(pPeb->Reserved2), то получается 1. И мне не совсем понятно такое несоответствие, когда поле структуры имеет размер 1 байт, а в памяти оно имеет размер 5 байт.

#include <iostream>
#include <Windows.h>
#include <winternl.h>
#include <string.h>

int main()
{
    PTEB tebPtr = (PTEB)__readgsqword(offsetof(NT_TIB, Self));
    PPEB pPeb = (PPEB)tebPtr->ProcessEnvironmentBlock;

    std::cout <<  sizeof( pPeb->Reserved1)  << std::endl;//2
    std::cout << sizeof(pPeb->BeingDebugged) << std::endl;//1
    std::cout << sizeof(pPeb->Reserved2) << std::endl;//1
    std::cout << sizeof(pPeb->Reserved3) << std::endl;//16
    std::cout << sizeof(pPeb->Ldr) << std::endl;//8
   
    std::cout << (DWORD64) & (pPeb->Reserved3) - (DWORD64) & (pPeb->Reserved2) << std::endl;//5

    system("pause");
    return  1;
}

Ответы (0 шт):