The following are the heap allocation routines found inside the Jai Basic
module. By default, they function basically the same as in C or C++; when you allocate, you also need to free. alloc
in Jai is the same as malloc
in C. alloc
returns a pointer to uninitialized memory. New
in Jai is the same as new
in C++.
#import "Basic";
a := alloc(size_of(int)); // heap allocates 8 bytes, alloc returns *void
b := New(int); // heap allocates an int
c := NewArray(10, int); // heap allocates an [] int array of size 10
You can align a heap allocation by passing an alignment
parameter to New
. For example, if you need your heap allocation to be 64-byte cache-aligned, you can do:
array := NewArray(500, int, alignment=64);
to make the array data start at an address that is a multiple of 64 bytes, i.e. at the start of a 64-byte cache line.
These are the corresponding memory freeing routines associated with allocation.
#import "Basic";
free(a); // frees allocated int variable "a"
free(b); // frees allocated int variable "b"
array_free(c); // frees allocated array "c"