发布时间:2024-11-22 00:23:46
示例代码:
``` var data = make([]byte, 1024) ```示例代码:
``` var bufferPool = sync.Pool{ New: func() interface{} { return new(bytes.Buffer) }, } func GetBuffer() *bytes.Buffer { return bufferPool.Get().(*bytes.Buffer) } func ReleaseBuffer(buffer *bytes.Buffer) { buffer.Reset() bufferPool.Put(buffer) } ``` 通过使用sync.Pool,我们可以减少内存分配和垃圾回收的次数,从而提高程序的性能。示例代码:
``` type Data struct { ID int32 // 4 bytes Flag bool // 1 byte Data []byte // 8 bytes (pointer) + 16 bytes (slice header) } ``` 在上述示例代码中,Golang会在`Flag`前面填充3个字节,以保证`Data`的地址是对齐的。示例代码:
``` type Data struct { ID int Value string } func NewData(id int, value string) *Data { data := &Data{ ID: id, Value: value, } runtime.SetFinalizer(data, func(d *Data) { fmt.Println("Finalizing data:", d.ID) }) return data } ``` 通过在结构体上设置finalizer函数,我们可以在对象被垃圾回收时执行一些必要的清理工作,从而避免内存泄漏。