После обсуждения с колледжем я задаюсь вопросом, возможно ли (даже если полностью не имеет смысла) освобождать память вручную в режиме go (т. Е. С помощью небезопасного пакета). Это?Возможно ли освободить память вручную?
ответ
Вот нить, которая может вас заинтересовать: Add runtime.Free() for GOGC=off
Интересная деталь:
The Go GC не имеет возможность вручную DEALLOCATE блоки больше. И кроме того, время исполнения. Free является небезопасным (люди могут бесплатно освобождать в использовании указателей или двойных бесплатных), а затем всевозможные проблемы с памятью C , с которыми Go пытается избавиться, вернутся. Другая причина - , что время выполнения иногда выделяется за вашей спиной, и нет никакой возможности для программы для явной свободной памяти.
Если вы действительно хотите вручную управлять памятью с помощью Go, внесите свой собственный распределитель памяти на основе syscall.Mmap или cgo malloc/free.
Отключение GC в течение длительного периода времени обычно является плохим решением для параллельного языка, такого как Go. И Go's GC будет только лучше по дороге. не
TL; DR: Да, но не делают это
Нет, это не возможно. – Volker
Вы всегда можете освободить выделенную память. Это то, что вы хотите сделать? – JimB
Язык стремится забыть об управлении памятью, поэтому понятно, почему у них не будет этой функции. –