Solaris 动态跟踪指南

标量变量

标量变量用于表示各个大小固定的数据对象(如整数和指针)。标量变量也可用于表示由一个或多个原始类型或复合类型组成的大小固定的对象。D 提供了用于创建对象数组和复合结构的功能。DTrace 还通过允许字符串扩大到预定义的最大长度,将字符串表示为大小固定的标量。第 6 章中将进一步讨论如何在 D 程序中控制字符串的长度。

在 D 程序中首次对先前未定义的标识符赋值时,会自动创建标量变量。例如,要创建一个名为 xint 类型的标量变量,只需在任何探测子句中为该变量指定一个 int 类型的值:

BEGIN
{
	x = 123;
}

按照此方式创建的标量变量为全局变量:其名称和数据存储位置只需定义一次,并且在 D 程序的所有子句中都可见。每次引用标识符 x 时,就是在引用与此变量关联的单个存储位置。

与 ANSI-C 不同,D 编程语言不需要显式声明变量。如果确实要声明一个全局变量,以在使用该变量之前为其显式指定名称和类型,则可以在程序中探测子句外部进行声明,如下例所示。在大多数 D 程序中无需显式声明变量,但如果要谨慎控制变量类型,或要在程序的开头使用一组声明和注释来说明该程序的变量及其含意,显式声明变量会很有用。

int x; /* declare an integer x for later use */

BEGIN
{
	x = 123;
	...
}

与 ANSI-C 声明不同,D 变量声明不能指定初始值。必须使用 BEGIN 探测子句指定所有初始值。在首次引用变量之前,DTrace 将使用零填充所有全局变量存储空间。

D 语言定义对 D 变量的大小和数量不设限制,但是 DTrace 实现和系统中可用内存会定义一些限制。D 编译器在编译程序时将强制执行可应用的任何限制。在第 16 章中可了解有关如何调整与程序限制相关的选项的更多信息。