发现从网上获得的这些信息上受益匪浅,同时感慨人家怎么那么牛,不仅技术牛,而且文章写的也好呢!真是自叹不如,同时也想实践一下,记录一下自己的学习心得,练练自己的文笔,不求能帮得上大家,但求能在这个网上结识一些朋友,大家互相学习,共同进步
编译器要对c++代码进行编译时需要按照相应的类型为变量分配内存空间,最为人们熟知的就是那五个空间了:栈,堆,全局数据区,常量区和代码区。现在知道了哪些变量存放在哪些空间里了,但是在相应的空间里又是如何存放的呢?相信很多人都已经知道了,我也知道了。
对齐方式有三种规则,看网上已经很详细了,我还是想用自己的话再说一遍吧:
下面用网上的例子和我的改进加以说明
试验:通过#pragma pack(n)改变“对齐系数”,然后察看sizeof(struct test_t)的值。
1字节对齐(#pragma pack(1))
输出结果:sizeof(struct test_t) = 8
分析过程:
1) 成员数据对齐
#pragma pack(1)
struct test_t {
int a; /* 长度4 > 1 按1对齐;起始offset=0 0%1=0;存放位置区间[0,3] */
char b; /*