go / expert
Snippet
Optimierung des Speicher-Alignments in Structs
Go richtet Strukturfelder basierend auf ihrer Größe aus. Große Felder sollten zuerst kommen, um Padding-Bytes zu minimieren, die der Compiler hinzufügt, um die Ausrichtung der Speicheradressen zu gewährleisten.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
type Optimized struct {A int64 // 8 bytesB int32 // 4 bytesC bool // 1 byte} // Total: 16 bytes (3 bytes padding)type Unoptimized struct {C bool // 1 byteA int64 // 8 bytes (7 bytes padding!)B int32 // 4 bytes} // Total: 24 bytes
Erklärung
1
A int64 // 8 bytes
Das Platzieren des größten Feldes zuerst verhindert unnötige Lücken.
2
C bool // 1 byte
Der Compiler fügt in der nicht optimierten Version 7 Bytes Padding hinzu, um das nächste int64 auszurichten.