(n int, force bool)
| 23 | } |
| 24 | |
| 25 | func newCGoSlice(n int, force bool) Slice { |
| 26 | after := allocOffheapBytes.Add(int64(n)) |
| 27 | if !force && after > MaxOffheapBytes() { |
| 28 | allocOffheapBytes.Sub(int64(n)) |
| 29 | return nil |
| 30 | } |
| 31 | p := cgo_malloc(n) |
| 32 | if p == nil { |
| 33 | allocOffheapBytes.Sub(int64(n)) |
| 34 | return nil |
| 35 | } |
| 36 | s := &cgoSlice{ |
| 37 | ptr: p, |
| 38 | buf: *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ |
| 39 | Data: uintptr(p), Len: n, Cap: n, |
| 40 | })), |
| 41 | } |
| 42 | runtime.SetFinalizer(s, (*cgoSlice).reclaim) |
| 43 | return s |
| 44 | } |
| 45 | |
| 46 | func (s *cgoSlice) Type() string { |
| 47 | return "cgo_slice" |
no test coverage detected