Malloc к списку структур в Zig?
Как я могу динамически выделить пространство памяти и получить указатель на список структур в Zig.
Как в C:
struct Foo* my_array_of_foo = (struct Foo*) malloc(10*sizeof(Foo));
1 ответ
Решение
const allocator: *std.mem.Allocator = std.heap.page_allocator;
const my_slice_of_foo: []Foo = allocator.alloc(Foo, 10);
Это выделит фрагмент с len 10. Позже его можно освободить с помощью allocator.free(my_slice_of_foo)
В zig массивы обычно представлены в виде фрагментов, содержащих указатель и количество элементов (struct {ptr: [*]type, len: usize}
). Распределители имеют функцию.create(type)
выделить место для одного значения и вернуть указатель, а функция .alloc(type, count)
для выделения непрерывного массива и возврата фрагмента.