在试图处理C级别的参考时,我似乎无法弄清newRV_inc
和newRV_noinc
之间的差异(实际中)。为此,我嘲笑了这个小小的Inline::C
例子。了解newRV_inc vs newRV_noinc
#!/usr/bin/env perl
use strict;
use warnings;
use Devel::Peek 'SvREFCNT';
my $arrayref_inc = make_arrayref_inc();
print "inc: ", SvREFCNT($arrayref_inc), "\n";
my $arrayref_noinc = make_arrayref_inc();
print "noinc: ", SvREFCNT($arrayref_noinc), "\n";
use Inline C => <<'END_C';
SV* make_arrayref_inc() {
AV * array = newAV();
SV * arrayref = newRV_inc((SV *)array);
return arrayref;
}
SV* make_arrayref_noinc() {
AV * array = newAV();
SV * arrayref = newRV_noinc((SV *)array);
return arrayref;
}
END_C
给出:
inc: 1
noinc: 1
谁能帮助我了解为什么这种行为这种方式?
谢谢@cjm,最后一段最后是我需要了解何时增加。虽然我敢打赌,在实践中,我将继续使用迄今为止我使用的“不破坏对象的最小增量”方法。 –