gpt4 book ai didi

ios - Objective-C 如何高效地进行引用计数?

转载 作者:可可西里 更新时间:2023-11-01 03:49:31 25 4
gpt4 key购买 nike

我正在上一门关于编译器的大学类(class),我们刚刚讲完垃圾收集和释放内存的方法。然而,在类讲授和我们的教科书中,我被引导相信引用计数并不是管理内存的好方法。

原因是引用计数非常昂贵,因为程序必须插入许多额外的指令来递增和递减引用计数。此外,每次引用计数发生变化时,程序都必须检查它是否等于零,如果是,则回收内存。

我的教科书上什至有一句话:“总的来说,引用计数的问题大于它的优点,在编程语言环境中很少用于自动存储管理。”

我的问题是:这些担忧是否合理? Objective-c 是否以某种方式避免了它们?如果是怎么办?

最佳答案

引用计数确实具有有意义的开销,这是事实。然而,跟踪垃圾收集器的“经典教科书”解决方案也并非没有缺点。最大的一个是不确定性,但暂停与吞吐量也是一个重要问题。

但最终,ObjC 并没有真正的选择。最先进的复制收集器需要 ObjC 所没有的语言的某些属性(例如,没有原始指针)。因此,尝试将教科书解决方案应用于 ObjC 最终需要一个部分保守的、非复制的收集器,这实际上与重新计数的速度大致相同,但没有其确定性行为。

(edit) 我个人的感觉是吞吐量是次要的,甚至是第三次的,真正重要的争论归结为确定性行为与循环收集和通过复制进行堆压缩。这三个都是如此有值(value)的属性,我很难选择一个。

关于ios - Objective-C 如何高效地进行引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com