首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

PerlGuts Illustrated (二 SV)

2012-08-21 
PerlGuts Illustrated (2 SV)_SV_HEAD and struct sv下面来看一下最简单的类型struct sv,代表了SV,GV,CV,A

PerlGuts Illustrated (2 SV)
_SV_HEAD and struct sv

下面来看一下最简单的类型struct sv,代表了SV,GV,CV,AV,HV,IO的通用结构。如下图所示:

PerlGuts Illustrated (二 SV)

第一个字段Any可以指向任意结构,除了RV,所有的其他类型都是由Any指向的附加数据来实现。
第二个字段REFCNT表明了有多少pointers引用了这个object。初始置为1,当有pointers指向它或者被销毁的时候,这个值需要相应的加1或者减1,当值为0的时候,内存释放。
第三个字段包含了FLAGS & TYPE,是一个32 bit unsigned int。如下图:

PerlGuts Illustrated (二 SV)

常见的flags见下边具体示例。

PerlGuts Illustrated (二 SV)


除了SV以外,额外的结构xpv被分配,它包含三部分:

PVX 指向实际的字符串。
CUR 标记字符串的长度,PVX+CUR 处的字符应该为'\0',标记字符串的结束。
LEN 标记内存分配给char * 的长度,以4为增量。

POK标记表示PVX所指向的内存包含有效字符串,否则所包含的字符串无效。


PerlGuts Illustrated (二 SV)

C:\>perl -MDevel::Peek -e "$a = '123testing'; $b = \$a ; Dump $b"SV = RV(0x182ab68) at 0x182ab5c  REFCNT = 1  FLAGS = (ROK)  RV = 0x182aa4c  SV = PV(0x296ffc) at 0x182aa4c    REFCNT = 2    FLAGS = (POK,pPOK)    PV = 0x182467c "123testing"\0    CUR = 10    LEN = 12



热点排行