In the code below, I expected addr[2] - addr[1] to be equal to 4x4=16 which is the answer given by block_count[1]*extent_int. Why addr[2] - addr[1] gives 20?
#include <mpi.h>
#include <iostream>
struct S
{
    int a;
    int nei[4];
    double point[4];
};
int main()
{
    MPI_Init(NULL, NULL);
    S s;
    int nblock = 3;
    // block count.
    int block_count[nblock] = {1, 4, 4};
    // extent.
    MPI_Aint lb, extent_int;
    MPI_Type_get_extent(MPI_INT, &lb, &extent_int);
    // offset.
    MPI_Aint addr[nblock];
    MPI_Get_address(&s.a, &addr[0]);
    MPI_Get_address(&s.nei[0], &addr[1]);
    MPI_Get_address(&s.point[0], &addr[2]);
    //
    std::cout << addr[1]-addr[0] << "  " << block_count[0]*extent_int << std::endl;
    std::cout << addr[2]-addr[1] << "  " << block_count[1]*extent_int << std::endl;
    MPI_Finalize();
    return 0;
}
Output:
4  4
20  16