获取内存的三种方式:
(1)sizeof();
(2)class_getInstanceSize;
(3) malloc_size
结构体内存对齐:
我们先来两个结构体分析一下:
上面的内存结构显示发现,有些事连续的,有些是不连续的。比如结构体myStruct1里的b和c之间是不连续,因为b的结束地址是5,下一个开始地址是6,而c是long类型占8字节,6不是8的倍数,然后需移到8的位置开始。另外一方面,两个结构体的最后一个参数的结束位置分别是16、14,而最后打印出来的占据的内存大小分别是24、16。是因为这个系统采用的是8字节对齐(目前最新的是16字节),需要内存地址对齐补充。
上面的结果是怎么样的呢?如下图:
结果如上所示结构体内嵌套结构体的内存是怎么样的呢
先端菜,上图:
结果是怎么样呢,嵌套的结构体是整个结构体的内存的倍数还是里面的参数的最大值的倍数呢?
我们看一下结果:
结构体嵌套结构体的内存展示对比对比发现,如果是整体内存的倍数,那应该会是48,然而实际给的是40;经过分析myStruct1里的参数最大为8,当第二个结构体的最后一个参数d结束后为14时,延至16开始,得出正确答案。
网友评论