github.com/etecs-ru/ristretto@v0.9.1/contrib/demo/node_allocator.go (about)

     1  //go:build jemalloc && allocator
     2  // +build jemalloc,allocator
     3  
     4  package main
     5  
     6  import (
     7  	"unsafe"
     8  
     9  	"github.com/etecs-ru/ristretto/z"
    10  )
    11  
    12  // Defined in node.go.
    13  func init() {
    14  	alloc = z.NewAllocator(10<<20, "demo")
    15  }
    16  
    17  func newNode(val int) *node {
    18  	// b := alloc.Allocate(nodeSz)
    19  	b := alloc.AllocateAligned(nodeSz)
    20  	n := (*node)(unsafe.Pointer(&b[0]))
    21  	n.val = val
    22  	alloc.Allocate(1) // Extra allocate just to demonstrate AllocateAligned is working as expected.
    23  	return n
    24  }
    25  
    26  func freeNode(n *node) {
    27  	// buf := (*[z.MaxArrayLen]byte)(unsafe.Pointer(n))[:nodeSz:nodeSz]
    28  	// z.Free(buf)
    29  }