=# SELECT typname, typlen, typalign FROM pg_type;
		typname                 | typlen | typalign 
----------------------------------------+--------+----------
 bool                                   |      1 | c
 bytea                                  |     -1 | i
 char                                   |      1 | c
 name                                   |     64 | c
 int8                                   |      8 | d
 int2                                   |      2 | s
 int2vector                             |     -1 | i
 int4                                   |      4 | i
 regproc                                |      4 | i
 text                                   |     -1 | i
 ...
(613 rows)

PostgreSQL の typalign が何のためにあるか知っていますか? 私はドキュメントとソースコードを読んだだけではわかりませんでした.

PostgreSQL: Documentation: 14: 52.62. pg_type には以下のような記述がありますが,あまりイメージが湧きません.

typalign is the alignment required when storing a value of this type. It applies to storage on disk as well as most representations of the value inside PostgreSQL. When multiple values are stored consecutively, such as in the representation of a complete row on disk, padding is inserted before a datum of this type so that it begins on the specified boundary.

動作確認

主に typalign を利用しているのは,ヒープタプルに値を埋めるfill_val 関数である.fill_val 関数では,att_align_nominal マクロを呼び出して char *data ポインタの値を変更している.

ここでは,att_align_nominal マクロをコピペして cur_offset にいろんな値を入力して返戻値を見てみる.

#include <iostream>
#include <array>

/*
 * att_align_nominal aligns the given offset as needed for a datum of alignment
 * requirement attalign, ignoring any consideration of packed varlena datums.
 * There are three main use cases for using this macro directly:
 *	* we know that the att in question is not varlena (attlen != -1);
 *	  in this case it is cheaper than the above macros and just as good.
 *	* we need to estimate alignment padding cost abstractly, ie without
 *	  reference to a real tuple.  We must assume the worst case that
 *	  all varlenas are aligned.
 *	* within arrays and multiranges, we unconditionally align varlenas (XXX this
 *	  should be revisited, probably).
 *
 * The attalign cases are tested in what is hopefully something like their
 * frequency of occurrence.
 */
#define att_align_nominal(cur_offset, attalign) \
( \
    ((attalign) == TYPALIGN_INT) ? INTALIGN(cur_offset) : \
     (((attalign) == TYPALIGN_CHAR) ? (uintptr_t) (cur_offset) : \
      (((attalign) == TYPALIGN_DOUBLE) ? DOUBLEALIGN(cur_offset) : \
       ( \
            SHORTALIGN(cur_offset) \
       ))) \
)

/* ----------------
 * Alignment macros: align a length or address appropriately for a given type.
 * The fooALIGN() macros round up to a multiple of the required alignment,
 * while the fooALIGN_DOWN() macros round down.  The latter are more useful
 * for problems like "how many X-sized structures will fit in a page?".
 *
 * NOTE: TYPEALIGN[_DOWN] will not work if ALIGNVAL is not a power of 2.
 * That case seems extremely unlikely to be needed in practice, however.
 *
 * NOTE: MAXIMUM_ALIGNOF, and hence MAXALIGN(), intentionally exclude any
 * larger-than-8-byte types the compiler might have.
 * ----------------
 */

#define TYPEALIGN(ALIGNVAL,LEN)  \
    (((uintptr_t) (LEN) + ((ALIGNVAL) - 1)) & ~((uintptr_t) ((ALIGNVAL) - 1)))

#define SHORTALIGN(LEN)			TYPEALIGN(ALIGNOF_SHORT, (LEN))
#define INTALIGN(LEN)			TYPEALIGN(ALIGNOF_INT, (LEN))
#define DOUBLEALIGN(LEN)		TYPEALIGN(ALIGNOF_DOUBLE, (LEN))

/* The normal alignment of `double', in bytes. */
#define ALIGNOF_DOUBLE  8

/* The normal alignment of `int', in bytes. */
#define ALIGNOF_INT     4

/* The normal alignment of `short', in bytes. */
#define ALIGNOF_SHORT   2

#define  TYPALIGN_CHAR      'c' /* char alignment (i.e. unaligned) */
#define  TYPALIGN_SHORT     's' /* short alignment (typically 2 bytes) */
#define  TYPALIGN_INT       'i' /* int alignment (typically 4 bytes) */
#define  TYPALIGN_DOUBLE    'd' /* double alignment (often 8 bytes) */

int main() {
    const std::array<char, 4> TYPALIGNS = {TYPALIGN_CHAR, TYPALIGN_SHORT, TYPALIGN_INT, TYPALIGN_DOUBLE};
    const size_t LEN = 32;

    std::cout << "########################################################################" << std::endl;
    std::cout << "# Test on char array                                                   #" << std::endl;
    std::cout << "########################################################################" << std::endl;
    auto *ca = new char[LEN];   // C-style array for easy use of pointer arithmetic
    for (auto typalign: TYPALIGNS) {
        for (ptrdiff_t i = 0; i < LEN; ++i) {
            std::printf("att_align_nominal(%p, '%c') = %p\n", ca + i, typalign, att_align_nominal(ca + i, typalign));
        }
    }

    std::cout << "########################################################################" << std::endl;
    std::cout << "# Test on short array                                                  #" << std::endl;
    std::cout << "########################################################################" << std::endl;
    auto *sa = new short[LEN];   // C-style array for easy use of pointer arithmetic
    for (auto typalign: TYPALIGNS) {
        for (ptrdiff_t i = 0; i < LEN; ++i) {
            std::printf("att_align_nominal(%p, '%c') = %p\n", sa + i, typalign, att_align_nominal(sa + i, typalign));
        }
    }

    std::cout << "########################################################################" << std::endl;
    std::cout << "# Test on int array                                                    #" << std::endl;
    std::cout << "########################################################################" << std::endl;
    auto *ia = new int[LEN];   // C-style array for easy use of pointer arithmetic
    for (auto typalign: TYPALIGNS) {
        for (ptrdiff_t i = 0; i < LEN; ++i) {
            std::printf("att_align_nominal(%p, '%c') = %p\n", ia + i, typalign, att_align_nominal(ia + i, typalign));
        }
    }

    std::cout << "########################################################################" << std::endl;
    std::cout << "# Test on double array                                                 #" << std::endl;
    std::cout << "########################################################################" << std::endl;
    auto *da = new double[LEN];   // C-style array for easy use of pointer arithmetic
    for (auto typalign: TYPALIGNS) {
        for (ptrdiff_t i = 0; i < LEN; ++i) {
            std::printf("att_align_nominal(%p, '%c') = %p\n", da + i, typalign, att_align_nominal(da + i, typalign));
        }
    }

    return 0;
}

出力は以下のとおり.

########################################################################
# Test on char array                                                   #
########################################################################
att_align_nominal(0x7ff9e1504080, 'c') = 0x7ff9e1504080
att_align_nominal(0x7ff9e1504081, 'c') = 0x7ff9e1504081
att_align_nominal(0x7ff9e1504082, 'c') = 0x7ff9e1504082
att_align_nominal(0x7ff9e1504083, 'c') = 0x7ff9e1504083
att_align_nominal(0x7ff9e1504084, 'c') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504085, 'c') = 0x7ff9e1504085
att_align_nominal(0x7ff9e1504086, 'c') = 0x7ff9e1504086
att_align_nominal(0x7ff9e1504087, 'c') = 0x7ff9e1504087
att_align_nominal(0x7ff9e1504088, 'c') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504089, 'c') = 0x7ff9e1504089
att_align_nominal(0x7ff9e150408a, 'c') = 0x7ff9e150408a
att_align_nominal(0x7ff9e150408b, 'c') = 0x7ff9e150408b
att_align_nominal(0x7ff9e150408c, 'c') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408d, 'c') = 0x7ff9e150408d
att_align_nominal(0x7ff9e150408e, 'c') = 0x7ff9e150408e
att_align_nominal(0x7ff9e150408f, 'c') = 0x7ff9e150408f
att_align_nominal(0x7ff9e1504090, 'c') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504091, 'c') = 0x7ff9e1504091
att_align_nominal(0x7ff9e1504092, 'c') = 0x7ff9e1504092
att_align_nominal(0x7ff9e1504093, 'c') = 0x7ff9e1504093
att_align_nominal(0x7ff9e1504094, 'c') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504095, 'c') = 0x7ff9e1504095
att_align_nominal(0x7ff9e1504096, 'c') = 0x7ff9e1504096
att_align_nominal(0x7ff9e1504097, 'c') = 0x7ff9e1504097
att_align_nominal(0x7ff9e1504098, 'c') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504099, 'c') = 0x7ff9e1504099
att_align_nominal(0x7ff9e150409a, 'c') = 0x7ff9e150409a
att_align_nominal(0x7ff9e150409b, 'c') = 0x7ff9e150409b
att_align_nominal(0x7ff9e150409c, 'c') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409d, 'c') = 0x7ff9e150409d
att_align_nominal(0x7ff9e150409e, 'c') = 0x7ff9e150409e
att_align_nominal(0x7ff9e150409f, 'c') = 0x7ff9e150409f
att_align_nominal(0x7ff9e1504080, 's') = 0x7ff9e1504080
att_align_nominal(0x7ff9e1504081, 's') = 0x7ff9e1504082
att_align_nominal(0x7ff9e1504082, 's') = 0x7ff9e1504082
att_align_nominal(0x7ff9e1504083, 's') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504084, 's') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504085, 's') = 0x7ff9e1504086
att_align_nominal(0x7ff9e1504086, 's') = 0x7ff9e1504086
att_align_nominal(0x7ff9e1504087, 's') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504088, 's') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504089, 's') = 0x7ff9e150408a
att_align_nominal(0x7ff9e150408a, 's') = 0x7ff9e150408a
att_align_nominal(0x7ff9e150408b, 's') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408c, 's') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408d, 's') = 0x7ff9e150408e
att_align_nominal(0x7ff9e150408e, 's') = 0x7ff9e150408e
att_align_nominal(0x7ff9e150408f, 's') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504090, 's') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504091, 's') = 0x7ff9e1504092
att_align_nominal(0x7ff9e1504092, 's') = 0x7ff9e1504092
att_align_nominal(0x7ff9e1504093, 's') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504094, 's') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504095, 's') = 0x7ff9e1504096
att_align_nominal(0x7ff9e1504096, 's') = 0x7ff9e1504096
att_align_nominal(0x7ff9e1504097, 's') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504098, 's') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504099, 's') = 0x7ff9e150409a
att_align_nominal(0x7ff9e150409a, 's') = 0x7ff9e150409a
att_align_nominal(0x7ff9e150409b, 's') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409c, 's') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409d, 's') = 0x7ff9e150409e
att_align_nominal(0x7ff9e150409e, 's') = 0x7ff9e150409e
att_align_nominal(0x7ff9e150409f, 's') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e1504080, 'i') = 0x7ff9e1504080
att_align_nominal(0x7ff9e1504081, 'i') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504082, 'i') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504083, 'i') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504084, 'i') = 0x7ff9e1504084
att_align_nominal(0x7ff9e1504085, 'i') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504086, 'i') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504087, 'i') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504088, 'i') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504089, 'i') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408a, 'i') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408b, 'i') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408c, 'i') = 0x7ff9e150408c
att_align_nominal(0x7ff9e150408d, 'i') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408e, 'i') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408f, 'i') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504090, 'i') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504091, 'i') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504092, 'i') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504093, 'i') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504094, 'i') = 0x7ff9e1504094
att_align_nominal(0x7ff9e1504095, 'i') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504096, 'i') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504097, 'i') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504098, 'i') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504099, 'i') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409a, 'i') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409b, 'i') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409c, 'i') = 0x7ff9e150409c
att_align_nominal(0x7ff9e150409d, 'i') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409e, 'i') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409f, 'i') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e1504080, 'd') = 0x7ff9e1504080
att_align_nominal(0x7ff9e1504081, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504082, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504083, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504084, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504085, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504086, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504087, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504088, 'd') = 0x7ff9e1504088
att_align_nominal(0x7ff9e1504089, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408a, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408b, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408c, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408d, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408e, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e150408f, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504090, 'd') = 0x7ff9e1504090
att_align_nominal(0x7ff9e1504091, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504092, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504093, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504094, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504095, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504096, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504097, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504098, 'd') = 0x7ff9e1504098
att_align_nominal(0x7ff9e1504099, 'd') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409a, 'd') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409b, 'd') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409c, 'd') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409d, 'd') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409e, 'd') = 0x7ff9e15040a0
att_align_nominal(0x7ff9e150409f, 'd') = 0x7ff9e15040a0
########################################################################
# Test on short array                                                  #
########################################################################
att_align_nominal(0x7ff9e1604080, 'c') = 0x7ff9e1604080
att_align_nominal(0x7ff9e1604082, 'c') = 0x7ff9e1604082
att_align_nominal(0x7ff9e1604084, 'c') = 0x7ff9e1604084
att_align_nominal(0x7ff9e1604086, 'c') = 0x7ff9e1604086
att_align_nominal(0x7ff9e1604088, 'c') = 0x7ff9e1604088
att_align_nominal(0x7ff9e160408a, 'c') = 0x7ff9e160408a
att_align_nominal(0x7ff9e160408c, 'c') = 0x7ff9e160408c
att_align_nominal(0x7ff9e160408e, 'c') = 0x7ff9e160408e
att_align_nominal(0x7ff9e1604090, 'c') = 0x7ff9e1604090
att_align_nominal(0x7ff9e1604092, 'c') = 0x7ff9e1604092
att_align_nominal(0x7ff9e1604094, 'c') = 0x7ff9e1604094
att_align_nominal(0x7ff9e1604096, 'c') = 0x7ff9e1604096
att_align_nominal(0x7ff9e1604098, 'c') = 0x7ff9e1604098
att_align_nominal(0x7ff9e160409a, 'c') = 0x7ff9e160409a
att_align_nominal(0x7ff9e160409c, 'c') = 0x7ff9e160409c
att_align_nominal(0x7ff9e160409e, 'c') = 0x7ff9e160409e
att_align_nominal(0x7ff9e16040a0, 'c') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e16040a2, 'c') = 0x7ff9e16040a2
att_align_nominal(0x7ff9e16040a4, 'c') = 0x7ff9e16040a4
att_align_nominal(0x7ff9e16040a6, 'c') = 0x7ff9e16040a6
att_align_nominal(0x7ff9e16040a8, 'c') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040aa, 'c') = 0x7ff9e16040aa
att_align_nominal(0x7ff9e16040ac, 'c') = 0x7ff9e16040ac
att_align_nominal(0x7ff9e16040ae, 'c') = 0x7ff9e16040ae
att_align_nominal(0x7ff9e16040b0, 'c') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040b2, 'c') = 0x7ff9e16040b2
att_align_nominal(0x7ff9e16040b4, 'c') = 0x7ff9e16040b4
att_align_nominal(0x7ff9e16040b6, 'c') = 0x7ff9e16040b6
att_align_nominal(0x7ff9e16040b8, 'c') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040ba, 'c') = 0x7ff9e16040ba
att_align_nominal(0x7ff9e16040bc, 'c') = 0x7ff9e16040bc
att_align_nominal(0x7ff9e16040be, 'c') = 0x7ff9e16040be
att_align_nominal(0x7ff9e1604080, 's') = 0x7ff9e1604080
att_align_nominal(0x7ff9e1604082, 's') = 0x7ff9e1604082
att_align_nominal(0x7ff9e1604084, 's') = 0x7ff9e1604084
att_align_nominal(0x7ff9e1604086, 's') = 0x7ff9e1604086
att_align_nominal(0x7ff9e1604088, 's') = 0x7ff9e1604088
att_align_nominal(0x7ff9e160408a, 's') = 0x7ff9e160408a
att_align_nominal(0x7ff9e160408c, 's') = 0x7ff9e160408c
att_align_nominal(0x7ff9e160408e, 's') = 0x7ff9e160408e
att_align_nominal(0x7ff9e1604090, 's') = 0x7ff9e1604090
att_align_nominal(0x7ff9e1604092, 's') = 0x7ff9e1604092
att_align_nominal(0x7ff9e1604094, 's') = 0x7ff9e1604094
att_align_nominal(0x7ff9e1604096, 's') = 0x7ff9e1604096
att_align_nominal(0x7ff9e1604098, 's') = 0x7ff9e1604098
att_align_nominal(0x7ff9e160409a, 's') = 0x7ff9e160409a
att_align_nominal(0x7ff9e160409c, 's') = 0x7ff9e160409c
att_align_nominal(0x7ff9e160409e, 's') = 0x7ff9e160409e
att_align_nominal(0x7ff9e16040a0, 's') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e16040a2, 's') = 0x7ff9e16040a2
att_align_nominal(0x7ff9e16040a4, 's') = 0x7ff9e16040a4
att_align_nominal(0x7ff9e16040a6, 's') = 0x7ff9e16040a6
att_align_nominal(0x7ff9e16040a8, 's') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040aa, 's') = 0x7ff9e16040aa
att_align_nominal(0x7ff9e16040ac, 's') = 0x7ff9e16040ac
att_align_nominal(0x7ff9e16040ae, 's') = 0x7ff9e16040ae
att_align_nominal(0x7ff9e16040b0, 's') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040b2, 's') = 0x7ff9e16040b2
att_align_nominal(0x7ff9e16040b4, 's') = 0x7ff9e16040b4
att_align_nominal(0x7ff9e16040b6, 's') = 0x7ff9e16040b6
att_align_nominal(0x7ff9e16040b8, 's') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040ba, 's') = 0x7ff9e16040ba
att_align_nominal(0x7ff9e16040bc, 's') = 0x7ff9e16040bc
att_align_nominal(0x7ff9e16040be, 's') = 0x7ff9e16040be
att_align_nominal(0x7ff9e1604080, 'i') = 0x7ff9e1604080
att_align_nominal(0x7ff9e1604082, 'i') = 0x7ff9e1604084
att_align_nominal(0x7ff9e1604084, 'i') = 0x7ff9e1604084
att_align_nominal(0x7ff9e1604086, 'i') = 0x7ff9e1604088
att_align_nominal(0x7ff9e1604088, 'i') = 0x7ff9e1604088
att_align_nominal(0x7ff9e160408a, 'i') = 0x7ff9e160408c
att_align_nominal(0x7ff9e160408c, 'i') = 0x7ff9e160408c
att_align_nominal(0x7ff9e160408e, 'i') = 0x7ff9e1604090
att_align_nominal(0x7ff9e1604090, 'i') = 0x7ff9e1604090
att_align_nominal(0x7ff9e1604092, 'i') = 0x7ff9e1604094
att_align_nominal(0x7ff9e1604094, 'i') = 0x7ff9e1604094
att_align_nominal(0x7ff9e1604096, 'i') = 0x7ff9e1604098
att_align_nominal(0x7ff9e1604098, 'i') = 0x7ff9e1604098
att_align_nominal(0x7ff9e160409a, 'i') = 0x7ff9e160409c
att_align_nominal(0x7ff9e160409c, 'i') = 0x7ff9e160409c
att_align_nominal(0x7ff9e160409e, 'i') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e16040a0, 'i') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e16040a2, 'i') = 0x7ff9e16040a4
att_align_nominal(0x7ff9e16040a4, 'i') = 0x7ff9e16040a4
att_align_nominal(0x7ff9e16040a6, 'i') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040a8, 'i') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040aa, 'i') = 0x7ff9e16040ac
att_align_nominal(0x7ff9e16040ac, 'i') = 0x7ff9e16040ac
att_align_nominal(0x7ff9e16040ae, 'i') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040b0, 'i') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040b2, 'i') = 0x7ff9e16040b4
att_align_nominal(0x7ff9e16040b4, 'i') = 0x7ff9e16040b4
att_align_nominal(0x7ff9e16040b6, 'i') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040b8, 'i') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040ba, 'i') = 0x7ff9e16040bc
att_align_nominal(0x7ff9e16040bc, 'i') = 0x7ff9e16040bc
att_align_nominal(0x7ff9e16040be, 'i') = 0x7ff9e16040c0
att_align_nominal(0x7ff9e1604080, 'd') = 0x7ff9e1604080
att_align_nominal(0x7ff9e1604082, 'd') = 0x7ff9e1604088
att_align_nominal(0x7ff9e1604084, 'd') = 0x7ff9e1604088
att_align_nominal(0x7ff9e1604086, 'd') = 0x7ff9e1604088
att_align_nominal(0x7ff9e1604088, 'd') = 0x7ff9e1604088
att_align_nominal(0x7ff9e160408a, 'd') = 0x7ff9e1604090
att_align_nominal(0x7ff9e160408c, 'd') = 0x7ff9e1604090
att_align_nominal(0x7ff9e160408e, 'd') = 0x7ff9e1604090
att_align_nominal(0x7ff9e1604090, 'd') = 0x7ff9e1604090
att_align_nominal(0x7ff9e1604092, 'd') = 0x7ff9e1604098
att_align_nominal(0x7ff9e1604094, 'd') = 0x7ff9e1604098
att_align_nominal(0x7ff9e1604096, 'd') = 0x7ff9e1604098
att_align_nominal(0x7ff9e1604098, 'd') = 0x7ff9e1604098
att_align_nominal(0x7ff9e160409a, 'd') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e160409c, 'd') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e160409e, 'd') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e16040a0, 'd') = 0x7ff9e16040a0
att_align_nominal(0x7ff9e16040a2, 'd') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040a4, 'd') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040a6, 'd') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040a8, 'd') = 0x7ff9e16040a8
att_align_nominal(0x7ff9e16040aa, 'd') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040ac, 'd') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040ae, 'd') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040b0, 'd') = 0x7ff9e16040b0
att_align_nominal(0x7ff9e16040b2, 'd') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040b4, 'd') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040b6, 'd') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040b8, 'd') = 0x7ff9e16040b8
att_align_nominal(0x7ff9e16040ba, 'd') = 0x7ff9e16040c0
att_align_nominal(0x7ff9e16040bc, 'd') = 0x7ff9e16040c0
att_align_nominal(0x7ff9e16040be, 'd') = 0x7ff9e16040c0
########################################################################
# Test on int array                                                    #
########################################################################
att_align_nominal(0x7ff9e1704080, 'c') = 0x7ff9e1704080
att_align_nominal(0x7ff9e1704084, 'c') = 0x7ff9e1704084
att_align_nominal(0x7ff9e1704088, 'c') = 0x7ff9e1704088
att_align_nominal(0x7ff9e170408c, 'c') = 0x7ff9e170408c
att_align_nominal(0x7ff9e1704090, 'c') = 0x7ff9e1704090
att_align_nominal(0x7ff9e1704094, 'c') = 0x7ff9e1704094
att_align_nominal(0x7ff9e1704098, 'c') = 0x7ff9e1704098
att_align_nominal(0x7ff9e170409c, 'c') = 0x7ff9e170409c
att_align_nominal(0x7ff9e17040a0, 'c') = 0x7ff9e17040a0
att_align_nominal(0x7ff9e17040a4, 'c') = 0x7ff9e17040a4
att_align_nominal(0x7ff9e17040a8, 'c') = 0x7ff9e17040a8
att_align_nominal(0x7ff9e17040ac, 'c') = 0x7ff9e17040ac
att_align_nominal(0x7ff9e17040b0, 'c') = 0x7ff9e17040b0
att_align_nominal(0x7ff9e17040b4, 'c') = 0x7ff9e17040b4
att_align_nominal(0x7ff9e17040b8, 'c') = 0x7ff9e17040b8
att_align_nominal(0x7ff9e17040bc, 'c') = 0x7ff9e17040bc
att_align_nominal(0x7ff9e17040c0, 'c') = 0x7ff9e17040c0
att_align_nominal(0x7ff9e17040c4, 'c') = 0x7ff9e17040c4
att_align_nominal(0x7ff9e17040c8, 'c') = 0x7ff9e17040c8
att_align_nominal(0x7ff9e17040cc, 'c') = 0x7ff9e17040cc
att_align_nominal(0x7ff9e17040d0, 'c') = 0x7ff9e17040d0
att_align_nominal(0x7ff9e17040d4, 'c') = 0x7ff9e17040d4
att_align_nominal(0x7ff9e17040d8, 'c') = 0x7ff9e17040d8
att_align_nominal(0x7ff9e17040dc, 'c') = 0x7ff9e17040dc
att_align_nominal(0x7ff9e17040e0, 'c') = 0x7ff9e17040e0
att_align_nominal(0x7ff9e17040e4, 'c') = 0x7ff9e17040e4
att_align_nominal(0x7ff9e17040e8, 'c') = 0x7ff9e17040e8
att_align_nominal(0x7ff9e17040ec, 'c') = 0x7ff9e17040ec
att_align_nominal(0x7ff9e17040f0, 'c') = 0x7ff9e17040f0
att_align_nominal(0x7ff9e17040f4, 'c') = 0x7ff9e17040f4
att_align_nominal(0x7ff9e17040f8, 'c') = 0x7ff9e17040f8
att_align_nominal(0x7ff9e17040fc, 'c') = 0x7ff9e17040fc
att_align_nominal(0x7ff9e1704080, 's') = 0x7ff9e1704080
att_align_nominal(0x7ff9e1704084, 's') = 0x7ff9e1704084
att_align_nominal(0x7ff9e1704088, 's') = 0x7ff9e1704088
att_align_nominal(0x7ff9e170408c, 's') = 0x7ff9e170408c
att_align_nominal(0x7ff9e1704090, 's') = 0x7ff9e1704090
att_align_nominal(0x7ff9e1704094, 's') = 0x7ff9e1704094
att_align_nominal(0x7ff9e1704098, 's') = 0x7ff9e1704098
att_align_nominal(0x7ff9e170409c, 's') = 0x7ff9e170409c
att_align_nominal(0x7ff9e17040a0, 's') = 0x7ff9e17040a0
att_align_nominal(0x7ff9e17040a4, 's') = 0x7ff9e17040a4
att_align_nominal(0x7ff9e17040a8, 's') = 0x7ff9e17040a8
att_align_nominal(0x7ff9e17040ac, 's') = 0x7ff9e17040ac
att_align_nominal(0x7ff9e17040b0, 's') = 0x7ff9e17040b0
att_align_nominal(0x7ff9e17040b4, 's') = 0x7ff9e17040b4
att_align_nominal(0x7ff9e17040b8, 's') = 0x7ff9e17040b8
att_align_nominal(0x7ff9e17040bc, 's') = 0x7ff9e17040bc
att_align_nominal(0x7ff9e17040c0, 's') = 0x7ff9e17040c0
att_align_nominal(0x7ff9e17040c4, 's') = 0x7ff9e17040c4
att_align_nominal(0x7ff9e17040c8, 's') = 0x7ff9e17040c8
att_align_nominal(0x7ff9e17040cc, 's') = 0x7ff9e17040cc
att_align_nominal(0x7ff9e17040d0, 's') = 0x7ff9e17040d0
att_align_nominal(0x7ff9e17040d4, 's') = 0x7ff9e17040d4
att_align_nominal(0x7ff9e17040d8, 's') = 0x7ff9e17040d8
att_align_nominal(0x7ff9e17040dc, 's') = 0x7ff9e17040dc
att_align_nominal(0x7ff9e17040e0, 's') = 0x7ff9e17040e0
att_align_nominal(0x7ff9e17040e4, 's') = 0x7ff9e17040e4
att_align_nominal(0x7ff9e17040e8, 's') = 0x7ff9e17040e8
att_align_nominal(0x7ff9e17040ec, 's') = 0x7ff9e17040ec
att_align_nominal(0x7ff9e17040f0, 's') = 0x7ff9e17040f0
att_align_nominal(0x7ff9e17040f4, 's') = 0x7ff9e17040f4
att_align_nominal(0x7ff9e17040f8, 's') = 0x7ff9e17040f8
att_align_nominal(0x7ff9e17040fc, 's') = 0x7ff9e17040fc
att_align_nominal(0x7ff9e1704080, 'i') = 0x7ff9e1704080
att_align_nominal(0x7ff9e1704084, 'i') = 0x7ff9e1704084
att_align_nominal(0x7ff9e1704088, 'i') = 0x7ff9e1704088
att_align_nominal(0x7ff9e170408c, 'i') = 0x7ff9e170408c
att_align_nominal(0x7ff9e1704090, 'i') = 0x7ff9e1704090
att_align_nominal(0x7ff9e1704094, 'i') = 0x7ff9e1704094
att_align_nominal(0x7ff9e1704098, 'i') = 0x7ff9e1704098
att_align_nominal(0x7ff9e170409c, 'i') = 0x7ff9e170409c
att_align_nominal(0x7ff9e17040a0, 'i') = 0x7ff9e17040a0
att_align_nominal(0x7ff9e17040a4, 'i') = 0x7ff9e17040a4
att_align_nominal(0x7ff9e17040a8, 'i') = 0x7ff9e17040a8
att_align_nominal(0x7ff9e17040ac, 'i') = 0x7ff9e17040ac
att_align_nominal(0x7ff9e17040b0, 'i') = 0x7ff9e17040b0
att_align_nominal(0x7ff9e17040b4, 'i') = 0x7ff9e17040b4
att_align_nominal(0x7ff9e17040b8, 'i') = 0x7ff9e17040b8
att_align_nominal(0x7ff9e17040bc, 'i') = 0x7ff9e17040bc
att_align_nominal(0x7ff9e17040c0, 'i') = 0x7ff9e17040c0
att_align_nominal(0x7ff9e17040c4, 'i') = 0x7ff9e17040c4
att_align_nominal(0x7ff9e17040c8, 'i') = 0x7ff9e17040c8
att_align_nominal(0x7ff9e17040cc, 'i') = 0x7ff9e17040cc
att_align_nominal(0x7ff9e17040d0, 'i') = 0x7ff9e17040d0
att_align_nominal(0x7ff9e17040d4, 'i') = 0x7ff9e17040d4
att_align_nominal(0x7ff9e17040d8, 'i') = 0x7ff9e17040d8
att_align_nominal(0x7ff9e17040dc, 'i') = 0x7ff9e17040dc
att_align_nominal(0x7ff9e17040e0, 'i') = 0x7ff9e17040e0
att_align_nominal(0x7ff9e17040e4, 'i') = 0x7ff9e17040e4
att_align_nominal(0x7ff9e17040e8, 'i') = 0x7ff9e17040e8
att_align_nominal(0x7ff9e17040ec, 'i') = 0x7ff9e17040ec
att_align_nominal(0x7ff9e17040f0, 'i') = 0x7ff9e17040f0
att_align_nominal(0x7ff9e17040f4, 'i') = 0x7ff9e17040f4
att_align_nominal(0x7ff9e17040f8, 'i') = 0x7ff9e17040f8
att_align_nominal(0x7ff9e17040fc, 'i') = 0x7ff9e17040fc
att_align_nominal(0x7ff9e1704080, 'd') = 0x7ff9e1704080
att_align_nominal(0x7ff9e1704084, 'd') = 0x7ff9e1704088
att_align_nominal(0x7ff9e1704088, 'd') = 0x7ff9e1704088
att_align_nominal(0x7ff9e170408c, 'd') = 0x7ff9e1704090
att_align_nominal(0x7ff9e1704090, 'd') = 0x7ff9e1704090
att_align_nominal(0x7ff9e1704094, 'd') = 0x7ff9e1704098
att_align_nominal(0x7ff9e1704098, 'd') = 0x7ff9e1704098
att_align_nominal(0x7ff9e170409c, 'd') = 0x7ff9e17040a0
att_align_nominal(0x7ff9e17040a0, 'd') = 0x7ff9e17040a0
att_align_nominal(0x7ff9e17040a4, 'd') = 0x7ff9e17040a8
att_align_nominal(0x7ff9e17040a8, 'd') = 0x7ff9e17040a8
att_align_nominal(0x7ff9e17040ac, 'd') = 0x7ff9e17040b0
att_align_nominal(0x7ff9e17040b0, 'd') = 0x7ff9e17040b0
att_align_nominal(0x7ff9e17040b4, 'd') = 0x7ff9e17040b8
att_align_nominal(0x7ff9e17040b8, 'd') = 0x7ff9e17040b8
att_align_nominal(0x7ff9e17040bc, 'd') = 0x7ff9e17040c0
att_align_nominal(0x7ff9e17040c0, 'd') = 0x7ff9e17040c0
att_align_nominal(0x7ff9e17040c4, 'd') = 0x7ff9e17040c8
att_align_nominal(0x7ff9e17040c8, 'd') = 0x7ff9e17040c8
att_align_nominal(0x7ff9e17040cc, 'd') = 0x7ff9e17040d0
att_align_nominal(0x7ff9e17040d0, 'd') = 0x7ff9e17040d0
att_align_nominal(0x7ff9e17040d4, 'd') = 0x7ff9e17040d8
att_align_nominal(0x7ff9e17040d8, 'd') = 0x7ff9e17040d8
att_align_nominal(0x7ff9e17040dc, 'd') = 0x7ff9e17040e0
att_align_nominal(0x7ff9e17040e0, 'd') = 0x7ff9e17040e0
att_align_nominal(0x7ff9e17040e4, 'd') = 0x7ff9e17040e8
att_align_nominal(0x7ff9e17040e8, 'd') = 0x7ff9e17040e8
att_align_nominal(0x7ff9e17040ec, 'd') = 0x7ff9e17040f0
att_align_nominal(0x7ff9e17040f0, 'd') = 0x7ff9e17040f0
att_align_nominal(0x7ff9e17040f4, 'd') = 0x7ff9e17040f8
att_align_nominal(0x7ff9e17040f8, 'd') = 0x7ff9e17040f8
att_align_nominal(0x7ff9e17040fc, 'd') = 0x7ff9e1704100
########################################################################
# Test on double array                                                 #
########################################################################
att_align_nominal(0x7ff9e2804080, 'c') = 0x7ff9e2804080
att_align_nominal(0x7ff9e2804088, 'c') = 0x7ff9e2804088
att_align_nominal(0x7ff9e2804090, 'c') = 0x7ff9e2804090
att_align_nominal(0x7ff9e2804098, 'c') = 0x7ff9e2804098
att_align_nominal(0x7ff9e28040a0, 'c') = 0x7ff9e28040a0
att_align_nominal(0x7ff9e28040a8, 'c') = 0x7ff9e28040a8
att_align_nominal(0x7ff9e28040b0, 'c') = 0x7ff9e28040b0
att_align_nominal(0x7ff9e28040b8, 'c') = 0x7ff9e28040b8
att_align_nominal(0x7ff9e28040c0, 'c') = 0x7ff9e28040c0
att_align_nominal(0x7ff9e28040c8, 'c') = 0x7ff9e28040c8
att_align_nominal(0x7ff9e28040d0, 'c') = 0x7ff9e28040d0
att_align_nominal(0x7ff9e28040d8, 'c') = 0x7ff9e28040d8
att_align_nominal(0x7ff9e28040e0, 'c') = 0x7ff9e28040e0
att_align_nominal(0x7ff9e28040e8, 'c') = 0x7ff9e28040e8
att_align_nominal(0x7ff9e28040f0, 'c') = 0x7ff9e28040f0
att_align_nominal(0x7ff9e28040f8, 'c') = 0x7ff9e28040f8
att_align_nominal(0x7ff9e2804100, 'c') = 0x7ff9e2804100
att_align_nominal(0x7ff9e2804108, 'c') = 0x7ff9e2804108
att_align_nominal(0x7ff9e2804110, 'c') = 0x7ff9e2804110
att_align_nominal(0x7ff9e2804118, 'c') = 0x7ff9e2804118
att_align_nominal(0x7ff9e2804120, 'c') = 0x7ff9e2804120
att_align_nominal(0x7ff9e2804128, 'c') = 0x7ff9e2804128
att_align_nominal(0x7ff9e2804130, 'c') = 0x7ff9e2804130
att_align_nominal(0x7ff9e2804138, 'c') = 0x7ff9e2804138
att_align_nominal(0x7ff9e2804140, 'c') = 0x7ff9e2804140
att_align_nominal(0x7ff9e2804148, 'c') = 0x7ff9e2804148
att_align_nominal(0x7ff9e2804150, 'c') = 0x7ff9e2804150
att_align_nominal(0x7ff9e2804158, 'c') = 0x7ff9e2804158
att_align_nominal(0x7ff9e2804160, 'c') = 0x7ff9e2804160
att_align_nominal(0x7ff9e2804168, 'c') = 0x7ff9e2804168
att_align_nominal(0x7ff9e2804170, 'c') = 0x7ff9e2804170
att_align_nominal(0x7ff9e2804178, 'c') = 0x7ff9e2804178
att_align_nominal(0x7ff9e2804080, 's') = 0x7ff9e2804080
att_align_nominal(0x7ff9e2804088, 's') = 0x7ff9e2804088
att_align_nominal(0x7ff9e2804090, 's') = 0x7ff9e2804090
att_align_nominal(0x7ff9e2804098, 's') = 0x7ff9e2804098
att_align_nominal(0x7ff9e28040a0, 's') = 0x7ff9e28040a0
att_align_nominal(0x7ff9e28040a8, 's') = 0x7ff9e28040a8
att_align_nominal(0x7ff9e28040b0, 's') = 0x7ff9e28040b0
att_align_nominal(0x7ff9e28040b8, 's') = 0x7ff9e28040b8
att_align_nominal(0x7ff9e28040c0, 's') = 0x7ff9e28040c0
att_align_nominal(0x7ff9e28040c8, 's') = 0x7ff9e28040c8
att_align_nominal(0x7ff9e28040d0, 's') = 0x7ff9e28040d0
att_align_nominal(0x7ff9e28040d8, 's') = 0x7ff9e28040d8
att_align_nominal(0x7ff9e28040e0, 's') = 0x7ff9e28040e0
att_align_nominal(0x7ff9e28040e8, 's') = 0x7ff9e28040e8
att_align_nominal(0x7ff9e28040f0, 's') = 0x7ff9e28040f0
att_align_nominal(0x7ff9e28040f8, 's') = 0x7ff9e28040f8
att_align_nominal(0x7ff9e2804100, 's') = 0x7ff9e2804100
att_align_nominal(0x7ff9e2804108, 's') = 0x7ff9e2804108
att_align_nominal(0x7ff9e2804110, 's') = 0x7ff9e2804110
att_align_nominal(0x7ff9e2804118, 's') = 0x7ff9e2804118
att_align_nominal(0x7ff9e2804120, 's') = 0x7ff9e2804120
att_align_nominal(0x7ff9e2804128, 's') = 0x7ff9e2804128
att_align_nominal(0x7ff9e2804130, 's') = 0x7ff9e2804130
att_align_nominal(0x7ff9e2804138, 's') = 0x7ff9e2804138
att_align_nominal(0x7ff9e2804140, 's') = 0x7ff9e2804140
att_align_nominal(0x7ff9e2804148, 's') = 0x7ff9e2804148
att_align_nominal(0x7ff9e2804150, 's') = 0x7ff9e2804150
att_align_nominal(0x7ff9e2804158, 's') = 0x7ff9e2804158
att_align_nominal(0x7ff9e2804160, 's') = 0x7ff9e2804160
att_align_nominal(0x7ff9e2804168, 's') = 0x7ff9e2804168
att_align_nominal(0x7ff9e2804170, 's') = 0x7ff9e2804170
att_align_nominal(0x7ff9e2804178, 's') = 0x7ff9e2804178
att_align_nominal(0x7ff9e2804080, 'i') = 0x7ff9e2804080
att_align_nominal(0x7ff9e2804088, 'i') = 0x7ff9e2804088
att_align_nominal(0x7ff9e2804090, 'i') = 0x7ff9e2804090
att_align_nominal(0x7ff9e2804098, 'i') = 0x7ff9e2804098
att_align_nominal(0x7ff9e28040a0, 'i') = 0x7ff9e28040a0
att_align_nominal(0x7ff9e28040a8, 'i') = 0x7ff9e28040a8
att_align_nominal(0x7ff9e28040b0, 'i') = 0x7ff9e28040b0
att_align_nominal(0x7ff9e28040b8, 'i') = 0x7ff9e28040b8
att_align_nominal(0x7ff9e28040c0, 'i') = 0x7ff9e28040c0
att_align_nominal(0x7ff9e28040c8, 'i') = 0x7ff9e28040c8
att_align_nominal(0x7ff9e28040d0, 'i') = 0x7ff9e28040d0
att_align_nominal(0x7ff9e28040d8, 'i') = 0x7ff9e28040d8
att_align_nominal(0x7ff9e28040e0, 'i') = 0x7ff9e28040e0
att_align_nominal(0x7ff9e28040e8, 'i') = 0x7ff9e28040e8
att_align_nominal(0x7ff9e28040f0, 'i') = 0x7ff9e28040f0
att_align_nominal(0x7ff9e28040f8, 'i') = 0x7ff9e28040f8
att_align_nominal(0x7ff9e2804100, 'i') = 0x7ff9e2804100
att_align_nominal(0x7ff9e2804108, 'i') = 0x7ff9e2804108
att_align_nominal(0x7ff9e2804110, 'i') = 0x7ff9e2804110
att_align_nominal(0x7ff9e2804118, 'i') = 0x7ff9e2804118
att_align_nominal(0x7ff9e2804120, 'i') = 0x7ff9e2804120
att_align_nominal(0x7ff9e2804128, 'i') = 0x7ff9e2804128
att_align_nominal(0x7ff9e2804130, 'i') = 0x7ff9e2804130
att_align_nominal(0x7ff9e2804138, 'i') = 0x7ff9e2804138
att_align_nominal(0x7ff9e2804140, 'i') = 0x7ff9e2804140
att_align_nominal(0x7ff9e2804148, 'i') = 0x7ff9e2804148
att_align_nominal(0x7ff9e2804150, 'i') = 0x7ff9e2804150
att_align_nominal(0x7ff9e2804158, 'i') = 0x7ff9e2804158
att_align_nominal(0x7ff9e2804160, 'i') = 0x7ff9e2804160
att_align_nominal(0x7ff9e2804168, 'i') = 0x7ff9e2804168
att_align_nominal(0x7ff9e2804170, 'i') = 0x7ff9e2804170
att_align_nominal(0x7ff9e2804178, 'i') = 0x7ff9e2804178
att_align_nominal(0x7ff9e2804080, 'd') = 0x7ff9e2804080
att_align_nominal(0x7ff9e2804088, 'd') = 0x7ff9e2804088
att_align_nominal(0x7ff9e2804090, 'd') = 0x7ff9e2804090
att_align_nominal(0x7ff9e2804098, 'd') = 0x7ff9e2804098
att_align_nominal(0x7ff9e28040a0, 'd') = 0x7ff9e28040a0
att_align_nominal(0x7ff9e28040a8, 'd') = 0x7ff9e28040a8
att_align_nominal(0x7ff9e28040b0, 'd') = 0x7ff9e28040b0
att_align_nominal(0x7ff9e28040b8, 'd') = 0x7ff9e28040b8
att_align_nominal(0x7ff9e28040c0, 'd') = 0x7ff9e28040c0
att_align_nominal(0x7ff9e28040c8, 'd') = 0x7ff9e28040c8
att_align_nominal(0x7ff9e28040d0, 'd') = 0x7ff9e28040d0
att_align_nominal(0x7ff9e28040d8, 'd') = 0x7ff9e28040d8
att_align_nominal(0x7ff9e28040e0, 'd') = 0x7ff9e28040e0
att_align_nominal(0x7ff9e28040e8, 'd') = 0x7ff9e28040e8
att_align_nominal(0x7ff9e28040f0, 'd') = 0x7ff9e28040f0
att_align_nominal(0x7ff9e28040f8, 'd') = 0x7ff9e28040f8
att_align_nominal(0x7ff9e2804100, 'd') = 0x7ff9e2804100
att_align_nominal(0x7ff9e2804108, 'd') = 0x7ff9e2804108
att_align_nominal(0x7ff9e2804110, 'd') = 0x7ff9e2804110
att_align_nominal(0x7ff9e2804118, 'd') = 0x7ff9e2804118
att_align_nominal(0x7ff9e2804120, 'd') = 0x7ff9e2804120
att_align_nominal(0x7ff9e2804128, 'd') = 0x7ff9e2804128
att_align_nominal(0x7ff9e2804130, 'd') = 0x7ff9e2804130
att_align_nominal(0x7ff9e2804138, 'd') = 0x7ff9e2804138
att_align_nominal(0x7ff9e2804140, 'd') = 0x7ff9e2804140
att_align_nominal(0x7ff9e2804148, 'd') = 0x7ff9e2804148
att_align_nominal(0x7ff9e2804150, 'd') = 0x7ff9e2804150
att_align_nominal(0x7ff9e2804158, 'd') = 0x7ff9e2804158
att_align_nominal(0x7ff9e2804160, 'd') = 0x7ff9e2804160
att_align_nominal(0x7ff9e2804168, 'd') = 0x7ff9e2804168
att_align_nominal(0x7ff9e2804170, 'd') = 0x7ff9e2804170
att_align_nominal(0x7ff9e2804178, 'd') = 0x7ff9e2804178

まとめ

以上のことを踏まえて PostgreSQL: Documentation: 14: 52.62. pg_type の記述をもう一度読み返す.

typalign is the alignment required when storing a value of this type. It applies to storage on disk as well as most representations of the value inside PostgreSQL. When multiple values are stored consecutively, such as in the representation of a complete row on disk, padding is inserted before a datum of this type so that it begins on the specified boundary.

typalign は PostgreSQL 内部の値の記述方法に関する情報である.例えば,タプルの値をストレージに書き込む場合,タプルに含まれる複数の値が連続して記述されることになるが,その際に att_align_nominal マクロで各値のバイナリ表現の前に typalign に基づくパディングを挿入し,適切な境界から値の記述が始まるようにしている.