Principle:ClickHouse ClickHouse Unaligned Memory Access
| Knowledge Sources | |
|---|---|
| Domains | Memory, Performance |
| Last Updated | 2026-02-08 00:00 GMT |
Overview
Techniques for safely reading and writing data at arbitrary memory addresses without alignment constraints.
Description
CPU architectures have alignment requirements: accessing multi-byte data at addresses not divisible by the data size may trap (crash), be slow, or produce wrong results. Unaligned access functions use memcpy (which compilers optimize to appropriate instructions) to safely handle unaligned addresses, avoiding undefined behavior. Modern CPUs (x86-64, ARMv8) support unaligned access in hardware but may have performance penalties.
Usage
Use when parsing binary formats (network protocols, file formats), implementing serialization, or accessing packed structures.
Theoretical Basis
Alignment Requirements: Most CPUs require N-byte data at addresses divisible by N for efficient access.
Undefined Behavior: C++ strict aliasing rules make type-punning via cast undefined; memcpy is well-defined.
Compiler Optimization: Modern compilers optimize small memcpy to direct load/store instructions.
Endianness: Unaligned access functions can simultaneously handle endianness conversion.