» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 32 123
发新话题
打印

【转载】iphone5S,64位CPU完全不用担心内存不够用

作为职业ios开发者,对iphone5s 的64位cpu性能也非常好奇, 对它的兼容性也不放心,因为如果原有的程序如果需要大量的修改才能为iphone5s优化,那么会是非常非常痛苦的事情,会给开发者带来沉重的负担,现在苹果已经发布了开发工具并支持64位程序的编译. 楼主第一时间下载并经过几天的研究, 颇有些意外.  这里打算用非常简单通俗的介绍来和大家分享一下64位cpu在iphone5s的表现预期.

    在iphone5s发布会当天, 苹果为开发者推出了xcode5GM版,附带ios7 sdk和新的ios7 64 sdk,这个是前面5个beta版本没有的,通过64位sdk开发者可以在虚拟机环境下模拟iphone5s的64位cpu和M7的运行效果,测试你的app.

    楼主打开一个今年新开发的项目,这个项目包含了3d战斗游戏,上网发微博,播放视频等常见的运行负荷,新的编译器不出所料的报了一堆错误, 因为新的ios7 sdk升级了, 很多语法需要改进. 经过一天的修改, 所有警告和错误均被消灭, 楼主长舒一口气, 基本上证明在代码阶段ios7的兼容性没有给我造成巨**烦. 接下来就是为arm64 cpu优化.首先看图片1<晕,怎么在贴子里插图片? 只能放在最后面??>

   这幅图片中的arm64是之前所有开发工具都没有的, 以前只有armv7和7s,对应的是iphone4s和iphone5的A5和A6CPU, 意思是你所编译的这个程序,需要兼容哪些cpu.默认已经添加了arm64的支持, 当然你也可以去掉,那么你编译的程序将只能以32位的方式在iphone5s上运行. 楼主修改了程序使得定义和实例都符合苹果64位编程的要求.

   OK,开始用虚拟机模拟iphone5和iphone5s的环境,分别测试程序的性能. 这里要说明下虚拟机的环境并不能完全代表实体iphone5s的运算性能,比如浮点和整数运算因为开发用的intel cpu性能大幅领先arm实体cpu,所以基础运行虚拟机会快很多. 内存的占用比较精确,无论虚拟机还是实体机都能准确的表达内存的占用情况. 3D运行效果则是实体机压倒性的领先,因为虚拟机下中3D加速无法用GPU来完成而是CPU虚拟的, 实体机借助强大的GPU比虚拟机快上十倍以上吧,目前无论是ios还是android都还内有办法完美解决3D虚拟机效率低下的问题.  但是今天要探究的是5s和5在64和32位的表现差异, 所以大家都在公平的虚拟机环境下,性能的表现也是有可比性的.

   我要测试的这个程序已经在AppStore上发布的,大家搜索陈乔恩就能下载,看下里边的功能就知道复杂程序了, 基本上是个机器负担中等的App. 首先让两个虚拟机都运行这个程序, 啥都不做, 只让程序启动并打开停留在第一个画面1分钟左右, 注意两幅图片顶部有iphone retina 4-inch 64-bit的为虚拟iphone5s, 没有64的为iphone5. 楼主神奇的发现为64位优化后的程序在iphone5s上内存占用为8.1MB而在iphone5上为9.9MB. 这个结果大跌眼镜,没有说错,5s在程序待机情况下居然占用更小的内存, 看来新的苹果编译器还是不吭爹的,具体原因后面再分析. 再说CPU占用, 双方都差不多, 5s的在3%-5%的区间, 5在5%-7%的区间, 5s略有优势而且平稳很多,不会有跳突的情况.  看来待机状态下5s胜出了.  说道内存这里有个题外话, 大家一直在讨论5s的内存是1G还是2G, 以我的开发经验来看,除非是渲染很复杂的3D程序在ipad retina的高分辨率下运行,大家才需要超过512的内存,实际上iPhone设备上开发者只要对程序用心优化过解决了所有泄露问题(这个太专业不讨论), 程序本身内存占用很少超过100MB.  但是如果把程序移植到Android的时候, 由于往往要加上吸费功能至少后台植入隐藏广告或者公开的广告浏览(这个是Android开发的潜规则),优化也是一笔带过, 100MB的内存占用至少跳到300MB.所以安卓系统2G内存是必须的! 在IOS为什么不能添加吸费和其他流氓功能呢? 不是我不想啊,呵呵.

    测试完待机, 要测试满负荷运行了, 楼主选中一个需要上网同步大量图片和数据的场景, 因为这种同步或者说火力全开的下载是所有App最常见的功能了, 通常的步骤是 App发出一个网络连接请求, IOS接到这个请求开始通过wifi或者3G去发送这个请求, 如果请求被目标服务器响应, 那么执行下载或者上传, 楼主的程序会有一个将下载的数据缓存到本地存储器以便下次不再需要消耗流量的功能, 这个过程也是需要消耗大量资源的读写过程. 我们看下这个过程5s的arm64的表现:
大家注意途中Memory的图标标是内存占用,启动上网同步功能以后, 内存占用从原来的10以内调涨到50+MB,iphone5s调涨到55.3MB, 而iphone5跳到51.3MB, 这下正常了,因为大量的文字和图片数据在64位环境下存储, 64位的机器理论上就要占用更多的内存,所以在满负荷运行数据交互的状态下, 5s要比5额外增加8%左右的内存开销, 当然这个结果是指楼主的这个App,但是楼主认为还是很据代表行的场景.  然后再说CPU, iphone5S的CPU在发起网络同步的那1-2秒内跳涨到30%,然后回落到原来的4%左右, iphone5的CPU也是1-2秒调涨到50%然后回落到8%左右, 看来无论是5还是5s,CPU性能是严重过剩的,用来同时运行10个楼主这样的程序也是小菜一碟吧.   这个回合内存占用5要比5s领先,CPU效率还是5S继续领先5.

    楼主还进行了内存leak,文件读写效率,JSON解析效率等64位的效果测试, 由于过程比较专业,有机会和有兴趣的同行讨论.所有测试的结论如下:
    1,所有原生的SDK功能, 如使用自带的UI界面等,iPhone5s都比iphone5占用更少的内存和更少的CPU占用, 用户自动以的类和存储5s基本会更多的消耗5-10%的内存,而CPU占用会比5少一些. 这也解释了为啥待机情况下5s内存比5少,因为待机情况下只调用的基本的UI控件. 2,基本上现有的APP,iphone5的性能已经完全够用, 而且iphone4s也能运行ios7并且完美运行99.9%的App,因为包括楼主在内的所有的ios开发者都希望自己的app被更多人使用,所以会呕心沥血的去为老设备优化,除非是实在需要新硬件的一些功能, 否则不会放弃老设备.3,买新机器不推荐4s和4了,至于5s还是5c,运行APP的角度上看,那10%-20%的差异实在没必要纠结. 因为现在的开发者都是以1136X640的4寸屏幕为最佳表现形式来设计App的, 然后看下3.5寸的效果调整下, 最后移植到Android给一个800X480的基准界面,其他分辨率拉伸. 所以Android屏幕再大就算是1080P的,也只不过是800X480的App拉伸下, 想要开发者去做1080P的新UI要准备那么多图片, 不是大公司做项目, 基本不现实. Android不流氓开发者赚不到一毛钱,这个是让人最心寒的.

    首次发帖啰嗦了这么多, 请见谅,如果问题,请回帖一起讨论, 有空再把做一个多重循环的压力测试,那个等5s的机器到手以后在实体机上运行再发出来.

//我是分割线
很多吧友关心5s是1G还是2G的内存, 这个问题再讨论下,
1,如果在ipad3,4,5上, 屏幕分辨率是2048x1536,这个分辨率运行32位色的大量图片渲染和3D模型, 那么内存轻松跳到500MB以上, 加上IOS7本身会占用100-200MB, 2G的内存是完全需要的.
2,如果在iphone5s的1136X640这个分辨率下, 在无抗锯齿的技术面试前, 所有开发者不会让内存占用达到200MB,基本会控制100-150,因为会考虑到老机型的用户,要赚他们的钱就不能把内存需求做的太大. 所以1G内存在2015年以前是完全可以运行AppStore里的所有App的, 不需要苹果去控制,开发者会按照市场需求去调整.

所以终端用户无需关心内存,这个是程序员的工作.


TOP

反正又不要做真·后台。所以完全用不到



TOP

ipad 比较呛..................


TOP

posted by wap, platform: ZTE (U970)

看网页就目前网站的操行那真心不够用啊,还好不支持flash,这点还是能节约一些内存。其实多窗口浏览网页消耗内存比玩移动游戏吃内存多了

TOP

苹果利润率都这么高了,发发善心加一倍内存不是挺好的吗?
在处理器、GPU上就没怎么抠门过

TOP

假设有两个除了工资和消费以外完全一致的国家,A国家平均工资1W元,,B国家平均工资10W元,但是吃饭喝水住房费是10倍的A国家的花费。两个国家基本生活消费都在工资的30%左右。最后,除了吃的和住的以外所有的东西都是全球统一价格。

那么你们选择活在A还是活在B
再信ios和WP的小内存,你再信啊!

TOP

引用:
原帖由 lwa190212 于 2013-9-15 20:29 发表
假设有两个除了工资和消费以外完全一致的国家,A国家平均工资1W元,,B国家平均工资10W元,但是吃饭喝水住房费是10倍的A国家的花费。两个国家基本生活消费都在工资的30%左右。最后,除了吃的和住的以外所有的东西都是 ...
就怕你生活在B可是只能拿1W元啊.....

TOP

安卓虽然有1080P屏幕,可是app都是以800x480为基准拉抻的~
深有同感啊~除非针对平板的hd版~

TOP

引用:
原帖由 qhlixpfh 于 2013-9-15 20:45 发表


就怕你生活在B可是只能拿1W元啊.....
没本事的哪都没救,在B国只能拿1W,在A国差不多就是1K的水准,你再感受一下是选A还是B

TOP

posted by wap, platform: Chrome
引用:
原帖由 @Lucifer6E  于 2013-9-15 21:17 发表
安卓虽然有1080P屏幕,可是app都是以800x480为基准拉抻的~
深有同感啊~除非针对平板的hd版~
仔细看了下手机,差点就被你骗了,呼

TOP

posted by wap, platform: Safari
引用:
原帖由 @黑暗骑士巫妖王  于 2013-9-15 21:57 发表
posted by wap, platform: Chrome

仔细看了下手机,差点就被你骗了,呼
他说那意思是UI没根据分辨率优化一下
其实我也觉得5寸以下根本没必要重新设计UI

TOP

引用:
但是如果把程序移植到Android的时候, 由于往往要加上吸费功能至少后台植入隐藏广告或者公开的广告浏览(这个是Android开发的潜规则),优化也是一笔带过, 100MB的内存占用至少跳到300MB.所以安卓系统2G内存是必须的! 在IOS为什么不能添加吸费和其他流氓功能呢? 不是我不想啊,呵呵.
这个是亮点

TOP

posted by wap, platform: Safari

果粉,不客观。

TOP

发这样的帖都是等着被 打脸的

TOP

posted by wap, platform: iPhone

所以内存还是1g咯?太坑爹,app来app去,真正平日里用到的app屈指可数,我要内存是为了浏览器,不要老因为内存不足重载崩溃的。

TOP

 32 123
发新话题
     
官方公众号及微博