oc中结构的对齐规则和vc不太一样。
比如:
typedef struct testStruct{
NSString *testStr1;
}TEST_STRUCT;
打印sizeof(TEST_STRUCT):结果是4
typedef struct testStruct{
NSString *testStr1;
double testdub;
}TEST_STRUCT;
打印sizeof(TEST_STRUCT):结果是12
typedef struct testStruct{
NSString *testStr1;
double testdub;
char testChr;
NSString *testStr2;
}TEST_STRUCT;
打印sizeof(TEST_STRUCT):结果是20
typedef struct testStruct{
NSString *testStr1;
double testdub;
char testChr;
short testSht;
NSString *testStr2;
}TEST_STRUCT;
打印sizeof(TEST_STRUCT):结果是20
注意点:
1.testStr1是指针,4个字节,指针地址是0。第二个参数是doublue型,8个字节,但并没有像oc那样指针地址从8开始,而是从4开始。开始的地址并不需要是当前参数所需内存字节的倍数。
2.
char testChr;
short testSht;公用一个4字节。
3.double型字节数是8,但是整个结构的字节数并不是8的倍数,也不同于VC。
结论:oc下结构,以4字节为界限,当参数类型超过4字节(比如double)时,会填满之前的4字节再开始填入内存。当参数类型少于4字节(char,short)时,规则相同于VC——即填满参数类型需要字节数的倍数。