Mallo c к списку структур в Zig? - PullRequest
2 голосов
/ 25 апреля 2020

Как я могу динамически выделить пространство памяти и получить указатель на список структур в Zig.

Как в C:

struct Foo* my_array_of_foo = (struct Foo*) malloc(10*sizeof(Foo));

1 Ответ

0 голосов
/ 05 мая 2020
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) для выделения непрерывного массива и возврата фрагмента.

...