【发布时间】:2016-06-05 19:00:37
【问题描述】:
Objective-C 使用称为tagged pointers 的花哨的东西来减少内存使用并提高处理某些小对象类型(如strings, dates, and numbers)时的速度。基本上,如果对象中的所有数据都可以放入指针中,则运行时会将其放在那里,而不是分配和跟踪堆内存。
Swift 有类似的机制吗?
【问题讨论】:
-
这是一个性能问题吗?这似乎与我们将如何使用 Swift 没有太大关系...
-
是的,标记指针实际上并不重要,尽管它们确实意味着获得的收益比人们想象的要少,例如,从循环创建
NSNumbers 切换直接使用int64_ts(或任何合适的大小)。这只是出于好奇而提出的问题。 -
Swift 字符串和数字已经是值类型而不是引用类型,因此没有指向标记的指针。基础字符串和数字是引用类型,可以标记为指针。
-
@Darren Swift 字符串和数字以及其他值类型表现类似于值类型。这是一个实现细节,无论它们是在堆栈还是堆上分配(也就是指针)。
-
@TomHamming 你肯定知道,标记指针对开发人员是透明的。所以 Swift 中的标记指针也是透明的。所以这是一个实现细节的问题。但是,我很确定 if 某些东西是使用引用实现的,他们会在 Swift 中选择相同的优化。一些(全部?)Swift 人来自 clang/rte 团队。他们知道 Objective-C 是做什么的。
标签: objective-c swift performance pointers