内存管理
2016-10-26 14:45:44 0 举报
内存管理是计算机系统中负责分配、回收和保护内存资源的关键过程。它确保程序能够高效地访问所需的内存空间,同时避免内存泄漏和溢出等问题。内存管理的主要任务包括:为进程分配合适的内存空间,实现内存的动态扩展与收缩,以及处理不同程序之间的内存共享与隔离。通过有效的内存管理,系统能够充分利用有限的内存资源,提高程序运行速度,降低系统开销。
作者其他创作
大纲/内容
弱引用表 weak_table_t哈希表
2.调用objc_initWeak方法
sidetables哈希查找sideTable,table中引用计数表refcountMap哈希查找size_t 偏移量-1
手动引用计数MRC
管理方案
自动释放池
weak_entry_t对象经过哈希函数获取结构体数组
多个弱引用指针
1位
过程
4.sidetable哈希算法找到弱引用数组
1.内核区
1.编译器会改写成autoreleasePoolpage:pop
1.自旋锁spinlock
7.是否正在析构 (dellocating)
循环引用
2.链表的父节点parent
高位地址0xC000
4.retainCount获取引用计数值
8.是否外挂散列表 (has_sidetable_rc)
3.散列表sideTablessideTable
多循环引用
5.autorelease结束时调用release使引用计数-1
3.引用计数
中间对象断环NSTimer被runloop持有
弱引用表weak_table_t
4.当前线程pthread
2.非指针isanonpointerIsa
1.编译器会改写成autoreleasePoolpage:push
自动引用计数ARC
1.alloc分配内存空间
2.当前next指针置为nil 插入哨兵,next指向下一个节点
2.引用计数表 refcountMap哈希表
1.小对象taggedPointer
4.新增weak和strong
4.类对象地址 (shiftcls)
以栈为节点的双向链表组成的数据结构,与线程一一对应
9.引用计数 (has_sidetable_rc)
PUSH
添加
1.对象析构后delloc
2.runtime支持和编译器共同协作
内存布局
移除
1.栈的下一个节点next
3.散列表sideTables
3.链表的子节点child
4.把对象中所有弱引用对象置为nil
本质
多张sideTable对象经过哈希函数找到对应的sideTable
会不断探测锁是否被释放,正常的锁会休眠等待其他线程唤醒,引用计数+1/-1为轻量访问
7.保留区
2.自动引用计数ARC
内存管理
19位
3.是否有C++、ARC (has_cxx_dtor)
调用C函数Calloc
size_t(64bit)对象经过哈希函数获取引用计数值需要右移两位
6位
2.是否处于析构中
低位地址0X0800
6.delloc操作时需显式调用super delloc
6.代码段(.text)
属性关键字
程序内存
1位
4.自动释放池
sidetables哈希查找sideTable,table中引用计数表refcountMap哈希查找size_t 偏移量+1
3.可以重写delloc
1.是否为非指针型 (nonpointerisa)
4.未初始化全局变量(.bss)
3.弱引用表 weak_table_t哈希表
对象内存
2.非指针isanonepointerisa
1.是否包含弱引用表
引用计数
3.当next到栈顶,则开辟一个新的栈
33位
1.手动引用计数MRC
5.魔法数字 (magic)
2.栈区(方法)(向下增长)
自循环引用
3.函数weak_register_no_lock弱引用添加
组成
6.是否有弱引用对象 (weakly_referenced)
1.编译器插入reatin 和relase
2.是否有关联对象 (has_assoc)
1.小对象targetPointer
POP
3.堆区(对象)(向上增长)
2.reatain引用计数+1
引用计数表refcountMap
5.已初始化全局变量(.data)
3.release引用计数-1
weak避免
3.根据哈希函数找到弱引用数组
2.找到上一个哨兵的位置,对所有对象做autorelease -1的操作
5.添加对象到弱引用数组
2.delloc会调用weak_clear_no_lock弱引用清除
相互循环引用
内存管理方案
散列表sideTables哈希表
1.声明为__weak对象
64bit内存结构arm64
忙等锁,轻量访问
0 条评论
下一页
为你推荐
查看更多