Memory Alignment Requirements

Why do most CPU architectures require or prefer memory alignment?

struct Data {
    char a;    // 1 byte
    int b;     // 4 bytes
    char c;    // 1 byte
}; // sizeof(Data) = ?
A

To prevent cache pollution

B

To reduce memory usage

C

To enable atomic operations and avoid multiple memory accesses

D

To simplify compiler implementation