Warum entspringt eine Konstante in Golang?

8

Hier ist mein Code, um einen Schlüssel C in redis

auf den Wert 1 zu setzen

Es 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?

    
user3219492 22.06.2017, 11:20
quelle

1 Antwort

8

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: Ссылка

    
Martin Gallagher 22.06.2017, 12:36
quelle

Tags und Links