It's got to do with aligned and unaligned memory accesses. For a type that is N bytes big, aligned access allows the values to only be on a addresses that are a multiple of N, where as unaligned allows them to be anywhere.
So as an example, a 32-bit (4 byte) integer type aligned search checks 0x8000'0000, 0x8000'0004, 0x8000'0008, 0x8000'000C, 0x8000'0010 etc, while unaligned would check 0x8000'0000, 0x8000'0001, 0x8000'0002, 0x8000'0003, 0x8000'0004, 0x8000'0005 and so on. The vast vast majority of games only ever store their values in an aligned manner, so only checking that can filter out useless results early -- plus it's a bit faster.
So as an example, a 32-bit (4 byte) integer type aligned search checks 0x8000'0000, 0x8000'0004, 0x8000'0008, 0x8000'000C, 0x8000'0010 etc, while unaligned would check 0x8000'0000, 0x8000'0001, 0x8000'0002, 0x8000'0003, 0x8000'0004, 0x8000'0005 and so on. The vast vast majority of games only ever store their values in an aligned manner, so only checking that can filter out useless results early -- plus it's a bit faster.
