美文网首页
iOS对象内存地址分配

iOS对象内存地址分配

作者: 东方诗空 | 来源:发表于2022-03-16 12:06 被阅读0次

iOS对象内存地址分配

iOS的对象编译转换为C/C++后,每一个对象都对应一个结构体
查看源码可以了解到

使用下面方法即可将Objective-C代码转换为C\C++代码

将Objective-C代码转换为C\C++代码
xcrun  -sdk  iphoneos  clang  -arch  arm64  -rewrite-objc  OC源文件  -o  输出的CPP文件
如果需要链接其他框架,使用-framework参数。比如-framework UIKit

创建一个实例对象至少需要多少内存

一个单独的对象所占内存为16个字节,其中isa占8个字节,其余8个字节为0
可以通过一下代码查看

创建一个实例对象,至少需要多少内存?
#import <objc/runtime.h>
class_getInstanceSize([NSObject class]);

创建一个实例对象,实际上分配了多少内存?
#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj);

结构体的内存分配原则:
结构体的大小必须是最大成员大小的倍数,即遵循内存对齐原则

综上:

系统分配了16个字节给NSObject对象(通过malloc_size函数获得)
但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_getInstanceSize函数获得)

相关文章

  • iOS的那些事儿

    内存 iOS对象内存地址分配[https://www.jianshu.com/writer#/notebooks/...

  • iOS对象内存地址分配

    iOS对象内存地址分配 iOS的对象编译转换为C/C++后,每一个对象都对应一个结构体查看源码可以了解到 使用下面...

  • iOS内存----内存布局(一)

    stack(栈):方法调用(内存地址向下增长)heap(堆):通过alloc等分配的对象(内存地址向上增长)bss...

  • Java四种引用

    引用是什么,引用就是在堆上分配了内存的对象的内存地址索引。拿到引用,就可以拿到堆上对应内存地址的对象。 Java ...

  • iOS 单例实现 - OC&&Swift

    iOS 项目中 不可缺少的部分: 单例 OC版本 : 当一个对象无论被分配多少次内存时,都只会是一个内存地址 Sw...

  • 堆区结构:分配-创建-内存布局

    堆区结构 1、对象分配过程 2、对象创建过程 3、对象内存布局 堆区就是一组连续指定的内存地址...

  • alloc init、allocWithZone

    前言 当我们创建一个OC对象的时候,一般是alloc init。alloc分配了对象的内存地址,init对对象就行...

  • iOS底层探索之对象原理(二)

    前言 iOS底层探索之对象原理(一)中了解到通过calloc我们对象有了内存地址,通过initInstanceIs...

  • Effective Objective-C

    一、对象所占的内存总是分配在堆空间中,绝对不会分配在栈上。 someString 是一个指针,它的值是个内存地址,...

  • iOS深浅拷贝

    概念 浅拷贝:只copy一份对象的指针,指向对象的内存地址,引用计数+1。 深拷贝:内容拷贝 分配了新的内存 不...

网友评论

      本文标题:iOS对象内存地址分配

      本文链接:https://www.haomeiwen.com/subject/koqpdrtx.html