//通过malloc_size函数获得,该函数返回的是系统给实例对象分配的内存大小,在64bit环境下,所获得的数值是16个字节的倍数。
Person *person =[[Person alloc] init];NSLog(@"%zu",malloc_size((__bridge constvoid*)person));//可以通过allocWithZone查看源码,会调用calloc(1, size)函数;size_t size = cls->instanceSize(extraBytes);
size_t instanceSize(size_t extraBytes){
size_t size =alignedInstanceSize()+ extraBytes;// CF requires all objects be at least 16 bytes.if(size <16) size =16;return size;}
但NSObject对象只使用了8个字节的空间。
//64bit环境下,可以通过class_getInstanceSize函数获得; NSLog(@"%zu",class_getInstanceSize([Person class]));//通过class_getInstanceSize检查源码,是通过alignedInstanceSize的内存对齐原理,返回实例对象的成员变量在内存中所占字节的大小;// Class's ivar size rounded up to a pointer-size boundary.
uint32_t alignedInstanceSize(){
returnword_align(unalignedInstanceSize());}