NSObject内存大小
类的本质是结构体 无须赘述
struct NSObject {
Class isa;
};
一个类对象的实例大小是8个字节
之所以打印出的16个字节,是因为一个NSObject 最小开辟16个字节
NSObject *obj = [[NSObject alloc]init];
// class_getInstanceSize 这是runtime 获取一个类对象的实例大小的方法
// 打印结果是 8
NSLog(@"%zd",class_getInstanceSize([NSObject class]));
// 对象指针的大小
// /* Returns size of given ptr */
// 打印结果是16
NSLog(@"%zd",malloc_size((__bridge const void *)obj));
int 类型的占有4个字节,isa 类型的占有8个字节,定义一个对象,有3个int 属性,实际大小为 8 + 3 * 4 = 20 字节,则打印出的类对象大小为 24个字节,而开辟的指针内存应该是32个字节。
因为内存对齐的规则,要从4的整数倍地址开始存储, 所以是有4个byte是空的,所以打印出来是24个字节。
@interface StudentA : NSObject
{
@public
int _age1;
int _age2;
int _age3;
// NSString * _lastname;
}
@end
StudentA *a = [[StudentA alloc]init];
// 打印结果是24
NSLog(@"%zd",class_getInstanceSize([StudentA class]));
// 打印结果是32
NSLog(@"%zd",malloc_size((__bridge const void *)a));

博客主要探讨NSObject内存大小。类本质是结构体,一个类对象实例大小为8字节,但NSObject最小开辟16字节。以含3个int属性的对象为例,实际大小20字节,打印出类对象大小24字节,开辟指针内存32字节,这是由内存对齐规则导致。
662

被折叠的 条评论
为什么被折叠?



