控制臺(tái)打印
NSObject *obj = [[NSObject alloc] init];
// 打印對(duì)象譬挚、地址荔仁、等蔼囊,p 也可以
po obj
// 打印內(nèi)存情況
x obj
// 輸出格式
// 內(nèi)存組,2g、4g徽鼎、7g 等等
x/4gx obj
// 二進(jìn)制、十六進(jìn)制、字符蜂莉、整形且蓬、浮點(diǎn)數(shù)
p/t 97
p/x 97
p/c 97
p/d 97
p/f 97
// 調(diào)用棧
bt
獲取內(nèi)存大小的三種方式
NSObject *objc = [[NSObject alloc] init];
NSLog(@"objc對(duì)象類型占用的內(nèi)存大行琅稹:%lu",sizeof(objc)); // 8
NSLog(@"objc對(duì)象實(shí)際占用的內(nèi)存大小:%lu",class_getInstanceSize([objc class])); // 8
NSLog(@"objc對(duì)象實(shí)際分配的內(nèi)存大卸褚酢:%lu",malloc_size((__bridge const void*)(objc))); // 16
結(jié)構(gòu)體內(nèi)存對(duì)齊
// 如果當(dāng)前屬性所在的位置诈胜,不是當(dāng)前屬性的整數(shù)倍,則向后移到最近的整數(shù)倍的位置
// 結(jié)構(gòu)體為其內(nèi)部屬性最大的大小
// 如果最終大小不是16的整數(shù)倍冯事,則擴(kuò)大到16的最小公倍數(shù)
//1耘斩、定義兩個(gè)結(jié)構(gòu)體
struct Mystruct1{
char a; //1字節(jié)
double b; //8字節(jié)
int c; //4字節(jié)
short d; //2字節(jié)
}Mystruct1;
struct Mystruct2{
double b; //8字節(jié)
int c; //4字節(jié)
short d; //2字節(jié)
char a; //1字節(jié)
}Mystruct2;
// 24-16
NSLog(@"%lu-%lu",sizeof(Mystruct1),sizeof(Mystruct2));
NSObject 屬性重排(類的占用大小優(yōu)化)
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *nickName;
@property (nonatomic, assign) int age;
@property (nonatomic, assign) long height;
@property (nonatomic) char c1;
@property (nonatomic) char c2;
/*
如上屬性會(huì)按照
isa // 8個(gè)字符
age+c2+c1 // 4 + 1 + 1個(gè)字符
name // 8字符
nickName // 8字符
height // 8字符
這種規(guī)律重排于內(nèi)存中
*/