| // 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 | |
| } | |