2016-06-15 7 views
1

После обсуждения с колледжем я задаюсь вопросом, возможно ли (даже если полностью не имеет смысла) освобождать память вручную в режиме go (т. Е. С помощью небезопасного пакета). Это?Возможно ли освободить память вручную?

+2

Нет, это не возможно. – Volker

+0

Вы всегда можете освободить выделенную память. Это то, что вы хотите сделать? – JimB

+0

Язык стремится забыть об управлении памятью, поэтому понятно, почему у них не будет этой функции. –

ответ

9

Вот нить, которая может вас заинтересовать: 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: Да, но не делают это