Bre*_*den 4 garbage-collection memory-management go
有一种分配内存的方法,但是我看不到一种分配内存的方法(在未打开Go GC的情况下)。
如果要使用Go编写操作系统,则需要为Go编写低级GC或禁用Go GC。在后一种情况下,如何释放内存?
PS-在Go邮件列表中已经广泛讨论了这个主题,但是我想向SO提出这个特定问题。
您可以runtime·free使用cgo 通过访问程序来释放任意内存。
例如,构建自己的程序包,mem并创建两个文件:
package mem
import "unsafe"
import "reflect"
func FreePtr(p unsafe.Pointer)
func Free(v interface {}) {
FreePtr(unsafe.Pointer(reflect.ValueOf(v).Elem().Pointer()))
}
Run Code Online (Sandbox Code Playgroud)
// +build gc
#include <runtime.h>
void ·Free(void* foo) {
runtime·free(foo);
}
Run Code Online (Sandbox Code Playgroud)
用法示例(释放一片并打印出多少次释放):
import "free/mem"
func main() {
var m1, m2 runtime.MemStats
runtime.ReadMemStats(&m1)
c := make([]int, 10000)
inspect.Free(&c)
runtime.ReadMemStats(&m2)
fmt.Printf("%d vs %d\n", m1.Frees, m2.Frees)
}
Run Code Online (Sandbox Code Playgroud)
您应该看到比以前多了一个免费版本。