Управление памятью в K / N обеспечивается средой выполнения.Он состоит из двух основных частей: автоматического подсчета ссылок и цикла сбора.Это дает возможность писать код так же, как в Kotlin / JVM.Некоторые подробности по этой теме можно найти, копаясь в этом файле , но все, что вам нужно знать, это то, что по умолчанию он автоматический.
О MemScoped и т. Д. При использовании взаимодействия сC, вам приходится иметь дело с управлением таким ресурсом, как native memory .Собственная память - это память, предоставляемая процессу приложения операционной системой.Поскольку он не имеет ничего общего с кодом Kotlin, этот ресурс не может управляться средой выполнения K / N.Но все C struct
s и переменные, которые вы собираетесь использовать, должны быть размещены там.Вы можете сделать это прямо, вызвав функцию nativeHeap.alloc()
.Когда потребность в этой памяти исчезнет, ее можно освободить с помощью nativeHeap.free()
.Но чтобы вам было удобнее, K / N также имеет класс Arena
, реализующий управление памятью на региональной основе.Это упрощает управление памятью до всего лишь серии alloc()
, где вам нужно, и одного освобождения на .clear()
для всего региона.Кроме того, есть блоки MemScoped {}, которые покрывают вашу арену и позволяют забыть даже об освобождении родной памяти.Таким образом, в вашем коде, который включает в себя некоторые элементы из C, вы можете просто написать MemScoped { ... }
, а затем поместить в него операции.Вы можете увидеть множество примеров такого подхода в samples из репозитория K / N