2016-06-15 10 views
1

Nach der Diskussion mit der Universität, ich frage mich, ob es möglich wäre (auch wenn völlig keinen Sinn macht), Speicher manuell loszulassen (dh mit unsicheren Paket). Ist es?Ist es möglich, den Speicher manuell aus dem Speicher zu entfernen?

+2

Nein ist dies nicht möglich. – Volker

+0

Sie können immer manuell zugewiesenen Speicher freigeben. Wollen Sie das tun? – JimB

+0

Die Sprache versucht, die Speicherverwaltung zu vergessen, daher ist es verständlich, warum sie diese Funktion nicht haben. –

Antwort

9

Hier ist ein Thread, die Sie interessieren könnten: Add runtime.Free() for GOGC=off

Interessante Teil:

Die Go GC nicht die Fähigkeit haben, manuell ausplanen Blöcke mehr. Und außerdem, Laufzeit. Free ist unsicher (Menschen könnten frei immer noch in Verwendung Zeiger oder doppelt frei) und dann alle Arten von C-Speicher-Problem , dass Go versucht, sich loswerden wird wiederkommen. Der andere Grund ist , dass die Laufzeit manchmal hinter Ihrem Rücken zuweist und es gibt keine Möglichkeit für das Programm explizit Speicher freizugeben.

Wenn Sie Speicher manuell mit Go verwalten möchten, implementieren Sie Ihren eigenen Speicherzuordner basierend auf syscall.Mmap oder cgo malloc/free.

Deaktivieren GC für längere Zeit ist in der Regel eine schlechte Lösung für eine gleichzeitige Sprache wie Go. Und Go's GC wird nur besser sein die Straße runter.

TL; DR: Ja, aber tun es nicht

Verwandte Themen