共用体的使用
BASIC解释器的任务之一就是记住程序所使用的变量的值。BASIC提供了几种不同的类型,所以每个变量的值和他的类型必须一起存储.这里有一个结构,用于保存这些信息,但效率不高(占用空间大)
1 struct Var
2 {
3 enum {INT,FLOAT,STRING} type;
4 int int_value;
5 float float_value;
6 char *string_value;
7 };
当BASIC程序中的一个变量被创建时,解析器就创建这样的一个结构,并记录变量类型。然后根据变量的类型,把变量的值储存在这三个变量中的其中一个。
改进后的结构:
1 struct Var
2 {
3 enum {INT,FLOAT,STRING} type;
4 union{
5 int i;
6 float f;
7 char *s;
8 }value;
9 };
共用体中,这三个字段都储存于同一个位置,所以减少了内存空间的浪费。如果共用体成员的长度不同,共用体的长度是他最长成员的长度。
如果成员之间的长度差别较大,最好在共用体中存储指向成员的指针,减少内存浪费。