github.com/sagernet/sing@v0.2.6/common/buf/pool.go (about) 1 package buf 2 3 func Get(size int) []byte { 4 if size == 0 { 5 return nil 6 } 7 return DefaultAllocator.Get(size) 8 } 9 10 func Put(buf []byte) error { 11 return DefaultAllocator.Put(buf) 12 } 13 14 func Make(size int) []byte { 15 if size == 0 { 16 return nil 17 } 18 var buffer []byte 19 switch { 20 case size <= 2: 21 buffer = make([]byte, 2) 22 case size <= 4: 23 buffer = make([]byte, 4) 24 case size <= 8: 25 buffer = make([]byte, 8) 26 case size <= 16: 27 buffer = make([]byte, 16) 28 case size <= 32: 29 buffer = make([]byte, 32) 30 case size <= 64: 31 buffer = make([]byte, 64) 32 case size <= 128: 33 buffer = make([]byte, 128) 34 case size <= 256: 35 buffer = make([]byte, 256) 36 case size <= 512: 37 buffer = make([]byte, 512) 38 case size <= 1024: 39 buffer = make([]byte, 1024) 40 case size <= 2048: 41 buffer = make([]byte, 2048) 42 case size <= 4096: 43 buffer = make([]byte, 4096) 44 case size <= 8192: 45 buffer = make([]byte, 8192) 46 case size <= 16384: 47 buffer = make([]byte, 16384) 48 case size <= 32768: 49 buffer = make([]byte, 32768) 50 case size <= 65535: 51 buffer = make([]byte, 65535) 52 default: 53 return make([]byte, size) 54 } 55 return buffer[:size] 56 }