capypad
0 Tage Serie
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
go
1
2
3
4
5
6
7
8
9
10
11
type Optimized struct {
A int64 // 8 bytes
B int32 // 4 bytes
C bool // 1 byte
} // Total: 16 bytes (3 bytes padding)
 
type Unoptimized struct {
C bool // 1 byte
A 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.