Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果我将Objective-C用于低级代码,我的iPhone应用程序的性能会受到影响吗?_C++_Iphone_Objective C_Performance_Optimization - Fatal编程技术网

C++ 如果我将Objective-C用于低级代码,我的iPhone应用程序的性能会受到影响吗?

C++ 如果我将Objective-C用于低级代码,我的iPhone应用程序的性能会受到影响吗?,c++,iphone,objective-c,performance,optimization,C++,Iphone,Objective C,Performance,Optimization,在iPhone或其他便携式硬件上编写CPU密集型或GPU密集型应用程序时,您必须做出明智的算法决策,以加快代码的速度 但是,如果您使用的语言的性能比另一种语言差,那么即使是很好的算法选择也会很慢 Po>是否有任何比较Objto-C到C++的硬数据,特别是iPhone上,但可能只是在Mac桌面上,用于各种类似的语言方面的性能?我非常熟悉,但这是一个比较两种面向对象语言的更大问题 例如,C++的VTABLE查找是否比Obj-C消息快?要快多少?线程、多态性、排序等。在我开始使用重复的对象模型和各种

在iPhone或其他便携式硬件上编写CPU密集型或GPU密集型应用程序时,您必须做出明智的算法决策,以加快代码的速度

但是,如果您使用的语言的性能比另一种语言差,那么即使是很好的算法选择也会很慢

<> Po>是否有任何比较Objto-C到C++的硬数据,特别是iPhone上,但可能只是在Mac桌面上,用于各种类似的语言方面的性能?我非常熟悉,但这是一个比较两种面向对象语言的更大问题

例如,C++的VTABLE查找是否比Obj-C消息快?要快多少?线程、多态性、排序等。在我开始使用重复的对象模型和各种测试代码构建项目之前,我想知道是否有人已经这样做了,结果如何。这种类型的测试和比较本身就是一个项目,可能需要相当长的时间。也许这不是一个项目,而是两个项目,而且只有产出可以比较

我在寻找硬数据,而不是福音。像你们中的许多人一样,出于各种原因,我喜欢和讨厌两种语言。此外,如果有人在积极追求同样的东西,我会很有兴趣在一些代码中投稿以查看最终结果,我相信其他人也会提供帮助。我的猜测是,它们都有优点和缺点,我的目标是准确地找出它们是什么,以便在现实世界中可以避免/利用它们。

为此很难收集“硬数据”,而这并不是误导

像您建议的那样进行功能对功能比较的最大问题是,这两种语言鼓励非常不同的编码风格。Objto-C是一种动态的语言,带有鸭式输入,其中典型的C++用法是静态的。使用C++或ObjaveC.

,同一个面向对象的体系结构问题可能会有非常不同的理想解决方案。

我的感觉(我已经用两种语言编程了很多,大部分是在大型项目上):为了最大化ObjultC性能,它必须写得非常接近C。而C++则可以比C.

更有效地使用语言而不受任何性能的惩罚。
哪一个更好?我不知道。对于纯粹的性能,C++总是有优势的。但是Objective-C的OOP风格肯定有它的优点。我确信,保持它的体系结构更容易。

< P> Mike Ash在他的文章中有一些用于执行ObjuleC方法调用的C和C++的硬数。也, 当谈到使用Objective-C++调整iPhone应用程序的性能时,Savoy软件是一本有趣的读物


与Objective-C++相比,我更喜欢Objective-C干净、描述性的语法,并且没有发现语言本身是我性能瓶颈的根源。我甚至倾向于做一些我知道的事情,如果他们让我的代码更可维护,牺牲一点点性能。

< P>我没有目标C的硬数据,但是我确实有一个寻找C++的好地方。p>

C++在C++ C++(Bjarne Stroustroup)早期的反映中,是以C类为基础的,因此C++可以被认为(类似于目标C),将C推到其面向对象的限制。p> 这些限制是什么?在1994年至1997年的时间框架中,许多研究人员发现,由于动态绑定,例如C++函数被标记为虚拟,可能存在/可能不存在覆盖这些功能的子类,因此对象定位会产生代价。(在Java和C#中,所有函数都期望CTOR本身是虚拟的,对此你无能为力。)在IBM东京研究所的研究人员的“Java实时编译器的虚拟化技术研究”中,他们对比了处理这一问题所使用的技术,包括Urz Hölzle和Gerald Aigner的技术。在与Karel Driesen的单独论文中,URZ胡尔勒曾显示,在调用虚拟函数(例如VTAB+Tununk)中,平均花费5.7%的时间在C++程序中(最多50%)。他后来与一些Smalltalk研究人员合作,最终开发了JavaHotSpot虚拟机来解决OO中的这些问题。这些特性中的一些被备份到C++(例如“保护”和异常处理)。


正如我提到的,C++是静态类型的,其中目标C是鸭型的。执行中的性能差异(而不是代码行)可能是这种差异的结果。

这实际上不是一般可以回答的问题,因为它实际上取决于您如何使用语言功能。两种语言都有他们擅长的东西,他们擅长的东西很慢,有时快,有时慢。这真的取决于你使用什么和你如何使用它。唯一确定的方法是分析代码

在目标C中,你也可以编写C++代码,所以在大多数情况下,在目标C中代码可能更容易,如果你发现一些在其中不好的东西,那么你可以写一个C++版本,看看它是否有用(C++在编译时倾向于更好地优化)。如果您正在使用的API也写在Objective C中,那么Objective C将更易于使用,而且您可能会发现它的OOP风格更容易或更灵活


最后,您应该使用您知道可以编写安全、健壮代码的语言,如果您发现需要另一种语言特别关注的领域,那么您可以切换到该领域。X-Code确实允许您在同一个项目中编译这两种代码。

我在iPhone 3G上做了几项测试,大约2年前,当时没有文档或硬数据。不确定它们是否仍然有效,但源代码已发布并附加

这不是一个非常广泛的测试,我主要是