Strukturen auf dem Stack und Heap in Go: Wie hängt das mit der Garbage Collection zusammen?
Hallo zusammen! Ich habe gerade angefangen, Go nach C++ und Java zu lernen, und die Speicherzuweisung für Strukturen verwirrt mich sehr. In C++ bin ich es gewohnt, explizit zu kontrollieren, ob ich ein Objekt auf dem Stack (`MyClass obj;`) oder auf dem Heap (`MyClass* obj = new MyClass();`) erstelle. In Java ist alles immer auf dem Heap, und Referenzen sind auf dem Stack.
Aber in Go sehe ich, dass Strukturen sowohl als `myStruct := MyStruct{}` (anscheinend auf dem Stack) als auch als `myStruct := &MyStruct{}` (anscheinend auf dem Heap) erstellt werden können. Dabei hat Go einen Garbage Collector. Ich bin völlig verwirrt.
Zum Beispiel habe ich diesen Code:
```go
type User struct {
Name string
Age int
}
func createUser(name string, age int) *User {
u := User{Name: name, Age: age}
return &u // Ich gebe einen Pointer auf eine lokale Variable zurück!
}
```
In C++ wäre das undefiniertes Verhalten (dangling pointer). In Go funktioniert es. Heißt das, dass `u` immer auf dem Heap allokiert wird? Oder ist der Compiler intelligent und entscheidet selbst? Wie hängt das mit der Garbage Collection zusammen? Warum sagt man manchmal, dass in Go besser...
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs