Block alighment, in the context of sofware engineering/computer science, is putting data in memory at addresses that are a multiple of 4 (or whatever the word size is, x86’s word size is 4 bytes).

For example, if you have the following data

struct {
char a; // 1 byte
short b; // 2 bytes
int c; // 4 bytes
}


This struct should be laid in memory as follows:



0 ───── char a
1
2
3
4 ───── short b
5       short b
6
7
8 ───── int c
9       int c
10      int c
11      int c



Notice, that regardless of the size of the data (1 byte, 2 byte, 4 bytes, etc), its address in memory always starts at a multiple of 4.

CPUs can fetch content at address of 4 multiples significantly faster than at other addresses.

For this reason, when you wanna save data to disk, or send it over the network, you “compress” it (make it non-block aligned) to save space, but when you load it back into memory again, you should block align it for speed.