Hier ist mein Code, um einen Schlüssel C in redis
auf den Wert 1 zu setzenEs verwendet Code von Drittanbietern, um sich mit redis zu verbinden.
%Vor% Beim Ausführen von go build -gcflags "-m -m"
meldet es
./ del.go: 41: 1 entkommt zu Heap
./ del.go: 41: von c.Do ("SET", "C", 1) (Parameter zum indirekten Aufruf) bei ./del.go:41
Warum entkommt 1 auf den Haufen? Es ist eine einfache Konstante, deren vollständige Informationen zum Zeitpunkt der Kompilierung bekannt sind und bei 64-Bit-Systemen nur 64 Bit benötigen. Warum sollte es im Heapspeicher gespeichert werden?
Die Signatur von Do
ist:
Do(commandName string, args ...interface{}) (reply interface{}, err error)
Weil args
ein variadic (slice of) interface{}
ist, ist der Heap allokiert.
Ich glaube, dass es für einfache Fälle wie diese in zukünftigen Versionen von Go einige Optimierungen geben könnte: Ссылка
Tags und Links go heap-memory constants