| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package calloc |
| |
| // This package contains a simple "batch" allocator for allocating |
| // coverage counters (slices of uint32 basically), for working with |
| // coverage data files. Collections of counter arrays tend to all be |
| // live/dead over the same time period, so a good fit for batch |
| // allocation. |
| |
| type BatchCounterAlloc struct { |
| pool []uint32 |
| } |
| |
| func (ca *BatchCounterAlloc) AllocateCounters(n int) []uint32 { |
| const chunk = 8192 |
| if n > cap(ca.pool) { |
| siz := chunk |
| if n > chunk { |
| siz = n |
| } |
| ca.pool = make([]uint32, siz) |
| } |
| rv := ca.pool[:n] |
| ca.pool = ca.pool[n:] |
| return rv |
| } |