

昨天的代码搞得我心情烦闷,晚上睡觉的时候,做梦气的把键盘给砸了,后悔不已,早上起来一睁眼,下意识的就看向键盘所在地,还好,它还在。所以说遇到事情的时候千万要保持理智,不然后悔的就是自己了。要时刻提醒自己在写代码的时候可不能再拽头发了。为了缓解一下心情,今天就学了个简单点的。唉,说起来这就尴尬了,简单的都没写对,这就很捞,信心满满的去运行,结果是错的,啥也不说了,反手给自己一个大嘴巴子,以表歉意。
这次学习的是自定义类型所占的空间大小。图一十二行,本来是想吧其中一个结构体类型,进行重命名的来展现它的不同表达形式,结果名字起的和第一个一样了。这可能就让系统君分辨不出来了,给我来了个错误提示。还有第十行,又忘了;号,低级错误,不可原谅。在定义完一个的时候最后括号外要有分号结尾,这个不能忘。开始算这两个空间大小时,我算第一个,一个字节,四个字节,一个字节,一加 六个字节。再算第二个,一,一,四,一加等于六。这答案不就是俩个六 。但现实却是残酷的,从最终的结果也能看出来,一个十二,一个八。这里面有结构体内存对齐这个说法,这也是刚学的。从我这个编译器运行的结果来看,默认对齐数应该是8,就拿第一个说说,第一个字节可以随便放,第二个就不能了,它需要先和规定的对齐数8进行比较,4和8比较选最小的4,之后要确保所存储的地方是4的倍数,所以要从第一个存储的字节后数空格,直到是4的倍数,在依次把4个字节储存 下来,第三个是一个字节可以直接存储因为后面肯定是1的倍数,所以从前往后数的话,一共有9个字节,但最终结果所需要的空间要是所存的最大字节的整数倍,因此还需要在加三个空格以保证,它是4的倍数。所以 最终的结果为12。第二个也是一样的分析,一般为了 空间的有效利用,要尽可能的把小字节的放在前面,从上面运行的结果来看,同样的字节总数,第二个明显空间更小。
也可以用#pragma pack()设置默认对齐数。用法是:
#pragma pack (想设置的默认数)
定义结构体
# pragma pack ()