当调用从Perl的C函数,例如使用Inline::C
:我应该在不会被返回到堆栈上的SV的SV上调用SvREFCNT_dec()吗?
use feature qw(say);
use strict;
use warnings;
use Inline C => './test.c';
say "Calling test()..";
test();
say "Finished.";
其中test.c
是:
void test()
{
SV *sv_variable = newSVpv("test", 0);
// do something..
//SvREFCNT_dec(sv_variable); // free variable
printf("Returning from test()..\n");
return;
}
脚本似乎好工作我是否打电话SvREFCNT_dec(sv_variable)
与否。根据perlguts
:
要释放您创建的SV,请调用SvREFCNT_dec(SV *)。通常 这个调用不是必需的
'newSVpv'与1.您的REFCNT开始可以将其视为'test()'获得引用的所有权。作为引用的所有者,'test()'必须在退出之前减少var的REFCNT或转移var的所有权。所以是的,''svREFCNT_dec'应该由'test()'调用。 – ikegami