原因是什么,Swift 应该比 Objective-C 快得多? [关闭]

2024-01-02

正如 Craig 在 Swift 公告中透露的那样,据说它迄今为止比 Objective-C 更快。

但我不太相信这种比较,因为正确实现的算法在 C 中应该是最快的,因为它可以由编译器高度优化,并且本质上是硬件友好的。 所以我猜测 Swift 可以获得的最佳性能是 C 语言中相同算法的性能。

既然 C 是 Objective-C 的一部分,为什么 Objective-C 和 Swift 的性能差距那么大呢?

我能想象的唯一原因是苹果使用 NSNumbers 等而不是 C 类型,但不应该作为 Obj-C - Swift 比较的基础,对吧?


这很大程度上是猜测(尽管是有根据的猜测),但我的两大理论是:

1) No 减少动态方法调度。 Objective-C 中的每个方法调用都会经过objc_msgSend。在最快的情况下,这可以快至 16 条指令,但也可能慢很多。与 Objective-C 相比,Swift 会在更少的情况下遭受这种惩罚,例如:对仅 swift 协议方法的方法调用不会命中objc_msgSend,但是如果协议是在 Obj-C 中声明的,或者 swift 协议用@objc(这样它也可以被 Objective-C 对象采用),然后对 swift 对象采用的该协议中的方法的方法调用似乎是通过objc_msgSend.

2) 避免堆分配。在 Objective-C 中,(实际上)每个对象都是在堆上分配的。使用静态类型系统,编译器可以推断有关对象生命周期的更多信息,并将其分配到堆栈上,除非它必须跨越 Objective-C 边界(或者太大而无法在堆栈上分配)。

我怀疑#2 是这两者中更大的一个,但两者都可能是重要的贡献者。我确信不仅仅是这个,但他们是两个很可能的贡献者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原因是什么,Swift 应该比 Objective-C 快得多? [关闭] 的相关文章

  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile

随机推荐

  • java.io.IOException:准备失败。:状态= 0x1

    我在使用phonegap的媒体时得到这个 这首歌无法播放 而是收到错误代码 5 有任何想法吗 05 26 02 35 41 796 1153 8918 V PlayerDriver HandleInformationalEvent PVMF
  • 在 Windows 7 盒子(64 位)上从 vb.net 创建快捷方式

    我正在尝试在 Windows 7 机器 64 位 上从 vb net 代码创建桌面快捷方式 以下代码在 XP 上运行 但在 Win7 上运行时 我只收到一条消息 说明该应用程序已停止工作 Imports IWshRuntimeLibrary
  • 如何使用 Delphi Win32 编写 SOAP 1.2 客户端的最佳方式

    目前还没有Delphi版本支持SOAP http en wikipedia org wiki SOAP 28protocol 291 2 客户端或服务器 我已经尝试了几个星期让它工作 但每次出现新问题时 使用 VS C 我都可以做同样的事情
  • 用 JSX 中的标签替换部分字符串

    我正在尝试用 JSX 标签替换字符串的一部分 如下所示 render function result this props text replace div div return div result div 但考虑到this props
  • NestJs 中所有装饰器的 Eslint 错误“已定义但从未使用”警告

    我正在为一个项目使用 NestJs 框架 今天发现EsLint发现了587个错误的问题 所有装饰器都会生成此错误 warning IsBoolean is defined but never used typescript eslint n
  • 带通滤波器组

    我已经实现了一组定向带通滤波器本文中描述的 https www researchgate net publication 220539167 Multidirectional Scratch Detection and Restoratio
  • 是否可以自动获取 Intellij 的正则表达式帮助来获取自己的正则表达式参数

    Intellij 为需要正则表达式的参数提供正则表达式 帮助 语法检查 例如编码 String array string split 将在正则表达式下标记错误并提供工具提示错误 不封闭组 这也适用于变量 例如 String myVar sh
  • 使用 Pusher API 通知特定用户

    我有一个使用jquery mobile和phonegap的移动网络应用程序 另一个是php网站 我希望只向在线和移动应用程序上的特定用户发送通知 接收在php网站端和移动网络应用程序上在线的用户的通知所以我的问题是如何为特定用户设置频道 因
  • WPF BitmapFrame 和多线程

    我有一个 PNG 文件存储在我的云中的 blob 存储中 我想下载它并在 WPF 中将其渲染在屏幕上 我知道调度程序和冻结 但没有任何作用 我不断收到有关 另一个线程拥有它 的错误 这是我所拥有的 var decoder GetDecode
  • 如何为Python安装scipy?

    我有Python 2 7 而且我有迪斯图尔斯 http docs python org library distutils html安装 我下载了最新版本的Scipy 赢得 32 http sourceforge net projects
  • Ansible fileglob:无法在预期路径中找到...

    我正在尝试使用 ansible 删除目录中的所有文件 同时保留目录 为此 我正在使用with fileglob按任务键将所有文件从该目录中取出item变量 我创建了一个最小的示例来显示我的问题 流浪文件 Vagrant configure
  • 开发客户端-服务器 iPhone 应用程序

    如果我想开发一个采用客户端 服务器设计的 iPhone 应用程序 iPhone 设备作为客户端和 C 服务器 有两个问题 是否可以使用我自己的笔记本电脑来运行服务器 如果不是 我有什么选择 我是否必须开发自己的消息传输协议 因此 如果我理解
  • 使用动态/具体类型初始化类型变量

    我正在学习 Scala 我试图创建一个类型类来解决 每种动物都吃食物 但食物的类型取决于动物 的问题 我有一个Eats具有上下文边界的类型类 trait Eats A lt Animal B lt Edible object Eats de
  • UWP:如何调用WinAPI方法

    我的问题很简单 我如何调用 WinAPI 方法 例如空剪贴板 https msdn microsoft com de de library windows desktop ms649037 v vs 85 aspx在 UWP 应用中 我包含
  • 如何限制图例大小并使其可与饼图一起滚动?和 javafx 布局

    我在我的 Swing 面板上集成了 javafx 饼图 它工作正常 但我的数据列表太大 无法放入图例中 并且图例正在扩展 导致饼图变小 我想让它可滚动但找不到任何解决方案 我是 javafx 新手 另外 您建议饼图面板和场景采用什么布局来适
  • 向 SQLAlchemy 查询添加上下文注释

    我正在尝试找出一种方法来向 SQLAlchemy 生成的查询添加注释 以指示其起源点 我知道 prefix with 方法 但对它不满意 因为它只会将前缀放在 SELECT 之后 并且我希望我的注释与实际查询逻辑完全分开 我偶然发现了一个解
  • PHP:使用“new”初始化数组与不使用“new”初始化数组有什么区别?

    我总是通过填充数组来创建数组 foo car 但我见过很多 foo array foo car and foo new array 不初始化 使用 array 和使用 new array 之间有什么区别 thanks 您不可以使用以下方法在
  • EF 上具有默认过滤器的实体

    我的 edmx 文件中有一个名为 Client 的实体 我必须对其运行多个 linq 查询 但在所有查询上 我需要一个过滤器 假设 active 1 我不想有一个where c active 1对于我的所有查询 我的实体应用了默认过滤器更有
  • WPF - 从组标题样式中绑定到当前项目

    我是 WPF 菜鸟 所以请对我放轻松 我正在尝试创建一个分组的 DataGrid WPF 工具包版本 我已成功创建数据源 DataGrid 本身 所需的 CollectionViewSource 和组标题的样式 使用扩展器 我想按名为 As
  • 原因是什么,Swift 应该比 Objective-C 快得多? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 正如 Craig 在 Swift 公告中透露的那样 据说它迄今为止比 Objective C 更快 但我不太相信这种比较 因为正确实现的算法在