我有两个代码部分,如下所示,在Perl和C中。这是关于Perl的my
变量和C的自动变量。在某种程度上,它们非常相似,因为它们在每次进入函数时都会被初始化。但Perl可以引用子例程的my
个变量,如果这样做,C将得到随机值,因为函数调用栈在返回后被销毁。任何人都知道Perl如何实现此功能?它不能保持每个子程序调用堆栈不变,是否Perl分配在“数据段”中的子程序中创建的每个my
变量(与堆栈相比)?
Perl代码:
use strict;
use warnings;
my $ref;
sub func
{
my $str = "hello";
$ref = \$str;
}
func;
print "value is ";
print "${$ref}\n";
C代码:
#include <stdio.h>
int *pi;
void func(void)
{
int j = 9;
pi = &j;
}
int main(void)
{
func();
printf("value is ");
printf("%d\n", *pi);
return 0;
}
谢谢,
答案 0 :(得分:0)
您正在将全局变量设置为引用,以便在函数中本地创建一些数据。
在Perl(一种“托管内存”语言)中,这将是一个引用计数“对象”(使用松散的术语,因为它是一个字符串),在所有引用都消失之前不会被垃圾收集。
在C中,这只是一个内存地址,你必须确保它仍然有效(并且不会指向函数返回时已经回收的堆栈空间。)