6.1局部存储分配 例在SPARC/Solaris工作站上下面两个结构 体的size分别是24和16,为什么不一样? typedef struct_a{ typedef struct_b{ char c1; char cl; long i; char c2; char c2; long i; double f; double f; }a; }b; 对齐:char:1,long:4,double:8
6.1 局部存储分配 • 例 在SPARC/Solaris工作站上下面两个结构 体的size分别是24和16,为什么不一样? typedef struct _a{ typedef struct _b{ char c1; char c1; long i; char c2; char c2; long i; double f; double f; }a; }b; 对齐:char : 1, long : 4, double : 8
6.1局部存储分配 例在SPARC/Solaris工作站上下面两个结构 体的size分别是24和16,为什么不一样? typedef struct_af typedef struct b{ char cl; char cl;0 long i; 4 char c2;1 char c2;8 long i; 4 double f;16 double f;8 }a; }b; 对齐:char:1,long:4,double:8
6.1 局部存储分配 • 例 在SPARC/Solaris工作站上下面两个结构 体的size分别是24和16,为什么不一样? typedef struct _a{ typedef struct _b{ char c1; 0 char c1; 0 long i; 4 char c2; 1 char c2; 8 long i; 4 double f; 16 double f; 8 }a; }b; 对齐:char : 1, long : 4, double : 8
6.1局部存储分配 ·例在X86九inux机器的结果和SPARC/Solaris 工作站不一样,是20和16。 typedef struct_a{ typedef struct_b{ char c1;0 char cl;0 long i; 4 char c2;1 char c2;8 long i; 4 double f; 12 double f;8 }a; }b; 对齐:char:1,long:4,double:4
6.1 局部存储分配 • 例 在X86/Linux机器的结果和SPARC/Solaris 工作站不一样,是20和16。 typedef struct _a{ typedef struct _b{ char c1; 0 char c1; 0 long i; 4 char c2; 1 char c2; 8 long i; 4 double f; 12 double f; 8 }a; }b; 对齐:char : 1, long : 4, double : 4
6.1局部存储分配 6.1.5程序块 本身含有局部变量声明的语句 可以嵌套 最接近的嵌套作用域规则 并列程序块不会同时活跃 并列程序块的变量可以重叠分配
6.1 局部存储分配 6.1.5 程序块 • 本身含有局部变量声明的语句 • 可以嵌套 • 最接近的嵌套作用域规则 • 并列程序块不会同时活跃 • 并列程序块的变量可以重叠分配
6.1局部存储分配 main0/*例*/ /begin of Bo * int a 0; int b=0; { /begin of B1 * int b=1; /begin of B2 * int a 2; /end of B,* /begin of B3 * int b 3; /end of B3 * /end of B * /end of Bo *
6.1 局部存储分配 main() / 例 / { / begin of B0 / int a = 0; int b = 0; { / begin of B1 / int b = 1; { / begin of B2 / int a = 2; } / end of B2 / { / begin of B3 / int b = 3; } / end of B3 / } / end of B1 / } / end of B0 /