mirror of
https://gitee.com/konyshe/goodlink.git
synced 2025-12-24 08:13:00 +08:00
52 lines
890 B
Go
52 lines
890 B
Go
package pool2
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
bufPool16k sync.Pool
|
|
bufPool5k sync.Pool
|
|
bufPool2k sync.Pool
|
|
bufPool1k sync.Pool
|
|
bufPool sync.Pool
|
|
)
|
|
|
|
func Malloc(size int) []byte {
|
|
var x interface{}
|
|
if size >= 16*1024 {
|
|
x = bufPool16k.Get()
|
|
} else if size >= 5*1024 {
|
|
x = bufPool5k.Get()
|
|
} else if size >= 2*1024 {
|
|
x = bufPool2k.Get()
|
|
} else if size >= 1*1024 {
|
|
x = bufPool1k.Get()
|
|
} else {
|
|
x = bufPool.Get()
|
|
}
|
|
if x == nil {
|
|
return make([]byte, size)
|
|
}
|
|
buf := x.([]byte)
|
|
if cap(buf) < size {
|
|
return make([]byte, size)
|
|
}
|
|
return buf[:size]
|
|
}
|
|
|
|
func Free(buf []byte) {
|
|
size := cap(buf)
|
|
if size >= 16*1024 {
|
|
bufPool16k.Put(buf)
|
|
} else if size >= 5*1024 {
|
|
bufPool5k.Put(buf)
|
|
} else if size >= 2*1024 {
|
|
bufPool2k.Put(buf)
|
|
} else if size >= 1*1024 {
|
|
bufPool1k.Put(buf)
|
|
} else {
|
|
bufPool.Put(buf)
|
|
}
|
|
}
|