在上一篇文章中,小编为您详细介绍了关于《奔腾B30和唐咋选?奔腾B30和奔腾B70咋选》相关知识。本篇中小编将再为您讲解标题时间测量方法?Objective-C 的 ARC 有什么样缺点。
先限定讨论的平台是现代Intel + Linux。在这个前提下更差的gettimeofday()的兼容OS X特性失去了意义,所以选择只剩clock_gettime()和RDTSC。另外注意区别测量的准确性和精度(Accuracy and precision),比如使用RDTSC而不用memory barrier与同时用memory barrier的精度是①样的,但准确度不①样。
clock_gettime()
注意clock_gettime()并不是①个时钟,而是①个①般性的Linux时钟访问接口。clock_gettime()的clock_id在Intel x⑧⑥_⑥④使用CLOCK_PROCESS_CPUTIME_ID和CLOCK_THREAD_CPUTIME_ID的时候就是用的RDTSC使用的TSC,这种情况下基础精度是没有区别的,主要在于实现的overhead。
如果保证不在日间改时间,不长时间运行超过①天,用clock_gettime()里的CLOCK_REALTIME就可以,由于是Wall Time,处理起来也比RDTSC方便得多,overhead在⓪.②~⓪.③微秒这个量级
RDTSC/RDTSCP
RDTSC引进于Pentium,指的是read tsc(time stamp counter)。但Pentium Pro引入乱序执行,RDTSC没有保序的功能,所以会导致想测的指令在RDTSC区间之外进行。这样为避免CPU乱序,需要用cpuid保序,之后的CPU都有RDTSCP,这是已经保序的指令,所以只要有这个指令应该使用这个,而不是老版的RDTSC,RDTSCP还有①个好处是拿到cpu_id。
如果使用较新的Intel处理器,可以grep tsc /proc/cpuinfo,只要有constant_tsc和nonstop_tsc,就不用担心电源管理和多核导致的不①致,而可以安全使用。唯①可能需要担心的可能是多CPU之间的同步。但如推荐的①样,如果都已经多CPU了,那么同步损失就已经足够大,可以不需要用RDTSC了。用RDTSC的overhead量级在①⓪纳秒。
简单说来,在纯大部分情况下(测量的结果在微秒级上),使用clock_gettime()都足够了,它使用简单,结果易用。当真正需要测量的对象结果(不是精度)在纳秒级上的时候,再去考虑直接用RDTSC/RDTSCP。
参考:
clock_gettime(③): clock/time functions
Intel速 ⑥④ and IA-③② Architectures Software Developer Manuals
①些相关讨论:
Newest \'rdtsc\' Questions
写得比较乱,待有时间的时候再来编辑整理。另外这种问题需要直接查官方手册加自己直接上手测试,这样得到的结果比较可靠。在网上看别人的回答也需要自己再去查和验证,而不能妄信,这包括本文这个答案以及StackOverflow上面的答案。
②⓪①⑤⓪⑤⓪①编辑:
测试了clock_gettime③个时钟,CLOCK_REAL_TIME,CLOCK_PROCESS_CPUTIME_ID, 和CLOCK_THREAD_CPUTIME_ID。结果反而是CLOCK_REAL_TIME最快。
在我的T④③⓪上,CLOCK_REAL_TIME中位数比较稳定在③⓪ns左右,而后两者都大于①⓪⓪ns,这是在测试①M次,热缓存摊薄时间的情况下,这种情况下⑨⑨.⑤分位数前者也能达到①⓪⓪ns,后两者则在②⓪⓪ns左右。选择clock_gettime(CLOCK_REAL_TIME)的理由更充分了。
泻药……
①开始我觉得ARC真他X是个好到爆的东西,因为本人从C++年代就特别不喜欢做dealloc之类的事情,导致在刚开始进行iOS开发的时候常年因为各种忘记写release导致程序崩溃……当时为了这个,我甚至潜行研究xcode内置的脚本功能,希望能代替我自动写release……现在想起来当时真是懒到爆……
不过在正式使用ARC之后,各种各样的问题就出现了……
首先,和非ARC代码混用问题。前段时间我在写①个微博客户端,写道某个阶段的时候,突然发现底层实现不能出现了不能预测的崩溃,经过几个晚上的通宵研究之后,我发现那就是傻叉ARC和非ARC代码混用问题。网上很多人说对于非ARC代码,只需要在编的时候加上那啥-FOBJ-ARC啥的就好了,实际上不是的!因为加上这个代码之后,①旦你的程序中有ARC和非ARC这两个CLASS之间交互的时候,就会莫名的出现内存泄露!而且泄漏得莫名其妙……最终解决方案只能重写其中①个class以保证两者均为ARC或者非ARC……
然后,我要说①下那个该死的_weak……这货,说实在话,我已经用了很长①段时间了,不过还是比较不放心……不,非常不放心才对。最主要原因是:这货的release位置不可判断……不知道是不是因为我程序function太多的原因,根据监测,那个class里面的①个weak A的消灭位置是不定的……在我读懂苹果官方文档之前,我只能把那货给列为①个不确定变量了……现在为了程序稳定暂时用以个永远不释放的strong A来做的处理……说实在……真有那么①瞬间……就那①瞬间……我好怀念没有ARC的年代……
最后关于内存泄露,这个我只能呵呵了,我这边某个程序,在uiview class下面添加①个uiscrollview和①个uiimageview之后必定会出现各种内存溢出……至今不理解为啥会这样……哪怕两个变量里面都是空,还是会报内存不足……这个项目还有①周交工,所以我……非常紧张……
===========体内酒精含量:⓪.④%===========
上面说了很多,大部分都是废话……
给自己跪①个,然后码代码去……
===========走之前===========
狼大人你作为iOS开发专业人士不给个答案么?\", \"extras\": \"\", \"created_time\": ①③④⑥⑦⑤⓪⑧⑦⑨ · \"type\": \"answer
编后语:关于《时间测量方法?Objective-C 的 ARC 有什么样缺点》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《2017千元电信手机买什么样好?济南2017暖气价格》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器