问题背景
有个用于多协程场景的loader,调用的cgo实现会返回一个指针指向当前空间,使用全局指针来记录该指针的值。
这里主要有这几个考量:
1.复用loader的内容,因为每次重新加载开销比较大。
2.更新后老空间如何释放(其他协程可能正在使用)。
目前想到的就是实现一个类似c++析构函数的功能或者对这块旧内存做引用计数(cgo的空间没法被go的垃圾回收管理)。
解决方案
大概的解决方案有以下两种:
- 自己实现一套内存回收机制,进行内存回收。
- 借助来实现
这里采用实现类似c++析构函数的方式(方式2)来解决。
package main
import (
"fmt"
"runtime"
"time"
)
type Memory struct {
ptr int64
}
func fun(m *Memory) {
("this is deal thing.")
}
func newMemory() *Memory {
mem := Memory{ptr: 1234}
(&mem, fun)
return &mem
}
func main() {
m := newMemory()
("m:%v\n", m)
()
(2 * )
}