字节对齐是在编译时决定的,一旦决定则不会再改变,因此即使有对齐的因素在,也不会出现一个结构在运行时尺寸发生变化的情况。
静态变量是放在全局数据区的,而sizeof计算栈中分配的大小,是不会把静态变量计算在内的。
大部分编译程序在编译的时候就把sizeof计算过了,是类型或者变量的长度,因此sizeof可以用来定义数组的维数。而strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度而不是类型所占内存的大小。
sizeof是一个运算符,括号内的内容在编译过程中是不被编译的,而是被替代类型。比如int a = 8; sizeof(a) 在编译过程中不管a的值是什么,只是被替代成类型sizeof(int)。而sizeof(a=6)也是一样的,执行完sizeof(a=6)之后啊的值还是8,因为括号内的内容是不被编译的。