成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS 7: 如何為iPhone 5S編譯64位應用

移動開發 iOS
大家都比較關心我們的應用如何遷移到 64位的系統上來,以充分發揮A7的能力。其實這些問題都可以在蘋果的官方文檔《64-Bit transition Guide for Cocoa Touch》中找到答案。為了方便大家,我將《64-Bit transition Guide for Cocoa Touch》中的一些重點整理了一下,希望可以為大家節約一些詳細閱讀文檔的時間,如果我理解有不對的地方請大家指正。

隨著iPhone5S的推出,大家開始關心5S上所使用的64位CPU A7。

除了關心A7的性能以外,大家還會關心一個問題,那就是使用A7的64位系統對應用有沒有什么要求。特別是應用開發者,大家都比較關心我們的應用如何遷移到 64位的系統上來,以充分發揮A7的能力。其實這些問題都可以在蘋果的官方文檔《64-Bit transition Guide for Cocoa Touch》中找到答案。

為了方便大家,我將《64-Bit transition Guide for Cocoa Touch》中的一些重點整理了一下,希望可以為大家節約一些詳細閱讀文檔的時間,如果我理解有不對的地方請大家指正。

首先,A7使用的是ARM V8架構,除了使用64位的地址總線和64位的寄存器以外,還增加了寄存器的數量,目前A7中的整數和浮點數寄存器是A6的兩倍。

這里需要強調的是,寄存器的增加大大提高了程序的運行速度。將CPU由32位提高到64位,最主要的改變增大了尋址能力,可以突破32位系統只能訪問3G內存的限制(32位系統在理論上可以訪問4G內存,因為2的32次方約等于4 290 000 000,很多32位系統只能訪問3G左右的內存是因為有一大部分地址被分配給I/O系統了,所以總體可用內存就不足4G了),但是,32位到64位的改變并不一定意味著程序運行速度的提高,甚至有些情況下會因為64位系統中的數據占用內存變大而導致程序運行速度變慢。而寄存器數量的增加,則直接提高了程 序運行速度,當然,前提是你的應用需要重新為64位系統編譯一遍,讓程序可以充分使用所有的寄存器。

使用Xcode 5可以很方便地將以前的應用編譯成64位程序,基本過程如下:

  • 1. 使用Xcode 5 打開原有項目。
  • 2. 將支持的設備改成“iOS 7”。
  • 3. 在“Build Setting”中將“Architectures”改成“Standard Architectures (including 64-bit)”。
  • 4. 運行測試程序,解決編譯過程出現的問題。

其中第4步是關鍵,具體會遇到什么問題和原來程序的設計有關,包括使用數據類型的方式是否標準等,后面會繼續討論細節,其實《64-Bit transition Guide for Cocoa Touch》一書主要就是講這些細節。

在討論細節之前有一些較為宏觀的內容大家可以了解一下。

Xcode 5編譯的iOS 7程序包含了32位和64位兩套二進制代碼,在32位的iOS系統上會調用32位的二進制代碼,在64位系統上會調用64位的二進制代碼,以此來解決向后兼容的問題。

同時,考慮到很多32位的程序可能在沒有重新編譯的情況下部署到64位系統上,64位的iOS系統中帶有兩套FrameWork,一套是32位的,一套是64位的。

當64位的iOS系統運行原來的32位程序時,系統會調用32位的FrameWork作為底層支撐,當系統運行64位程序時,系統會調用64位的FrameWork作為底層支撐。

也就是說,當一個iPhone 5S上同時運行32位程序和64位程序時,系統同時將32位和64位兩套FrameWork載入了內存中,所以消耗的內存也比較多。

如果一臺64位的iOS設備上運行的所有程序都是為64位系統編譯過的,iOS系統將只載入64位的FrameWork,這將節省好多內存。所以,如果大家都可以快速將程序傳換成64位的,iOS將跑得更快。真的是“大家好才是真的好”。

后面我們來看看一些為64位系統調整程序的技術細節。

32位的iOS系統和64位的iOS系統主要的差別有兩個,一個是數據類型的差別,一個是過程調用方法的差別。

在數據類型上,主要的變化是指針類型(Pointer)和長整數類型(long)的長度變化和內存對齊方式的變化,同時也導致了更高級別數據類型的變化,如NSInteger的長度也有變化。

在過程調用方法上,因為ARM V8 和ARM V7具有不同數量的寄存器,具有不同的過程調用約定,所以32位系統和64位系統在匯編層級是不同的。

根據以上兩方面的變化,書中總結了以下要點,開發人員根據以下要點來檢查原來的32位代碼就差不多可以將應用移植到64位系統上了:

1. 不要將長整型數據(long)賦予整型(int)

這種代碼在32位系統上沒有問題,因為在32位系統中long和int的長度是一樣的,不過在64位系統中就有可能出問題,因為64位系統中long比int長,將long值賦予int將導致數據丟失。

2. 不要將指針類型(Pointer)賦予整型(int)

為 了方便地址計算,有時程序員會將指針類型賦予整型,這種代碼在32位系統上沒有問題,因為在32位系統中Pointer和int的長度是一樣的,不過在 64位系統中就會有問題,因為64位系統中Pointer比int長,將Pointer值賦予int將導致地址數據丟失,最終導致嚴重問題。

3. 留意那些和數位相關的數值計算

比如掩碼技術,如果使用一個long類型的掩碼,轉到64位系統后高位都是0,計算出來的結果可能不符合預期。還有無符號整數和有符號整數的混用等。

4. 留意對齊方式帶來的變化

如果在32位系統上定義一個結構包含兩個long類型,第二個long數值的偏移地址是4,可以通過結構地址+4的方式獲取,但是在64位系統上就不行了,因為在64位系統中第二個long數值的偏移地址是8。

5. 充分考慮在32位應用和64位應用之間的數據交換

因 為用戶會通過網絡交換數據,同時用戶保存的數據也可能通過備份等方式在32位系統和64位系統之間切換,所以應用在保存和發送流數據的時候一定要考慮充 分。比如數據在32位系統中保存,在64位系統中能否正常打開,或者反過來,在64位系統中保存,在32位系統中打開是否正常。

6. 重寫所有匯編代碼

這點無需說明,如果你在代碼中嵌入了匯編代碼,你需要參考64位系統的指令集重寫匯編代碼。

7. 不要將可變參數的過程強制轉換為定參過程,也不要將定參過程強制轉換為可變參數的過程

這時因為32位系統和64位系統對于這兩種過程調用方式的處理方法不同。

按以上幾個重點去檢查程序就差不多了,當然,具體的細節還有很多,需要在實際工作中結合代碼和調試結果進行分析。

總之,建議具體負責應用遷移的開發者需要完整閱讀《64-Bit transition Guide for Cocoa Touch》。

責任編輯:徐川 來源: csdn博客
相關推薦

2013-10-25 17:14:20

iOS7性能

2013-09-17 15:29:51

AndroidiPhone 5S

2013-10-15 16:35:39

iPhone 5siPhone 5iPhone 5c

2013-09-23 10:43:42

2013-09-12 10:40:43

2013-12-13 14:01:54

2013-10-14 09:30:28

iPhone 5s藍屏iOS7

2013-09-11 10:56:02

蘋果iPhone 5S

2013-09-11 11:05:04

蘋果iPhone 5S

2013-09-11 11:28:16

蘋果iPhone 5ciPhone 5s

2013-09-12 11:35:56

2013-09-16 16:20:33

iPhone 5S指紋識別

2013-09-11 14:45:33

2013-09-23 11:02:14

2013-09-30 10:36:00

蘋果iPhone 5s

2013-08-13 09:54:39

iPhone 4iPhone 5iOS 7

2013-08-23 10:12:02

蘋果iPhone 5S

2013-09-22 11:29:32

2014-03-04 17:56:58

iPhone 6

2013-09-26 11:16:15

三星Galaxy S4iPhone 5s
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本黄视频在线观看 | 中文字幕在线观看第一页 | 亚洲综合在线视频 | 欧美大片在线观看 | 国产偷录叫床高潮录音 | 欧美精品在线一区二区三区 | 日本中文字幕在线观看 | 国产日韩欧美中文 | www.天天干.com| 欧美精品在线免费 | 久久国产婷婷国产香蕉 | 日韩一区二区三区在线看 | 欧美久久国产 | 二区久久 | 国产精品性做久久久久久 | 一级做a毛片 | 欧美日韩一区精品 | 99久久婷婷国产综合精品电影 | 欧美极品视频在线观看 | 99久久国产综合精品麻豆 | av在线播放网站 | 国产成人精品一区二区三区网站观看 | 欧美视频一区二区三区 | 国产精品一区二区三级 | 国产精品视频二区三区 | 精品亚洲国产成av人片传媒 | tube国产| www中文字幕 | 99精品久久久 | 亚洲视频一区在线观看 | av永久免费 | 国产一级毛片精品完整视频版 | 天天久 | 最新国产精品视频 | 一级黄色毛片子 | 99免费在线视频 | 精品国产不卡一区二区三区 | 国产欧美在线一区 | 不卡一区二区在线观看 | 亚洲成网站 | 日日草天天干 |