Если вы уже понимаете, что ...
То, что делает NativeCall, вызывает C функций. Это , а не Роль NativeCall в выделении или освобождении памяти.
LocalFree - это функция C. Обычный способ вызова функции C из Raku - через NativeCall.
... тогда вы можете спокойно проигнорировать этот ответ - и вопрос, на который это ответ, и ответ Тодда.
Если вы не уверены в вышесказанном, то, возможно, этот ответ устранит любую путаницу и снизит вероятность того, что вы введены в заблуждение. Ниже я пишу pendati c. Но я считаю, что необходимо обеспечить ясность.
Запускает ли Raku NativeCall «LocalFree ()»?
Да, если вы скажете это.
NativeCall - это функция, обычно используемая для вызова C функций из Raku. 1
Запускает ли Raku NativeCall "LocalFree ()" после создания буферов?
NativeCall не создает собственные буферы. Все, что делает NativeCall, это вызывает C функции в соответствии с инструкциями пользовательского кода.
Допустим, вы используете NativeCall для вызова функции C, которая создает буфер. Означает ли это, что NativeCall создал буфер? Или ты ? (Аналогичным образом, если кто-то использует NativeCall для вызова LocalFree после того, как он использует NativeCall для вызова функции C, которая создает буферы, означает ли это ответ на вопрос Тодда «Да»? А если нет, значит ли это, что ответ Нет?)
Вы можете использовать NativeCall для вызова LocalFree
, потому что LocalFree - это функция C, а вызов функций C - это именно то, что делает NativeCall, когда вы используете ее для выполнения. что-то. 2
Или мне нужно сделать это самому?
В зависимости от вашего ответа на вопросы в скобках пару абзацев выше .. .
Учитывая, что NativeCall не создает буферы, вы не можете делать что-либо, связанное с созданием буферов NativeCall.
В альтернативном варианте, если NativeCall создает буферы, это потому, что вы использовали его для ручного вызова C функций, которые создают буферы , и поэтому вам также необходимо вручную вызывать C функции для освобождения этих буферов, если вы хотите их освободили.
Сноски
1 NativeCall - это раку C FFI .
2 Независимо от того, что вы «используете» NativeCall, вы начнете с use NativeCall
оператора. Тогда вы обычно используете его для вызова C функций. Возможно, вы могли бы use
получить доступ только к некоторым константам, которые он определяет.