###运行代码 让计算机告诉你数据类型站内存情况
//32位系统,地址长度是32位(bit),也就是4Byte 64位系统,地址长度是64位(bit),也就是8Byte
//注意 1byte = 8 bit;sizeof byte
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
char a[] = "go swift"; //自动为末尾加上'/0',注意空格也要占字节
char b[14] = "go swift";
char *c = a;
char *d = "01234";
int16_t t16;
int32_t t32;
int64_t t64;
NSLog(@"%ld", sizeof(a));
NSLog(@"%ld", sizeof(b));
NSLog(@"%ld", sizeof(c));
NSLog(@"%ld", sizeof(d)); //d是指向字符串常量的字符指针
NSLog(@"%ld", sizeof(*d)); //*d是第一个字符 (所占大小由数据类型决定)
NSLog(@"int type: %ld,%ld,%ld,%ld", sizeof(t16),sizeof(t32),sizeof(t64),sizeof(&t16));
}
}
###执行结果x86_64
2016-06-12 10:51:06.651 goswift[36141:474463] 9
2016-06-12 10:51:06.652 goswift[36141:474463] 14
2016-06-12 10:51:06.652 goswift[36141:474463] 8
2016-06-12 10:51:06.652 goswift[36141:474463] 8
2016-06-12 10:51:06.652 goswift[36141:474463] 1
2016-06-12 10:59:41.724 goswift[37006:485097] int type: 2,4,8,8
###计算字符串 占多少byte
NSString *str=@"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSUInteger bytes = [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%lu bytes", bytes);
###内存对齐
结构体的内存布局依赖于CPU
、操作系统
、编译器
及编译时的对齐选项
//内存对齐,简单的说访存总线的位数固定,以32位总线为例,地址总线的地址总是4对齐的,所以数据也四对齐的话
struct node1{
char a;//32位机 占1个字节
int b;//32... 4个字节
};
sizeof(node1)// 结果等于8
struct node2{
int a;
int b;
};
sizeof(node2)// 结果等于8