日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模拟器与真机的区别

發布時間:2023/12/2 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟器与真机的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模擬器是把symbian OS內核移植到win32平臺,大多數情況下模擬器環境和真機相似,但仍有以下區別,有些足以給開發者帶來不少麻煩。字節對齊和內存限制將著重介紹。
1. 引導程序
?? 真機上,首先運行一個引導程序用來在啟動內核之前對一系列硬件初始化。模擬器就不需要進行初始化硬件而是直接啟動內核(運行epoc.exe)
2. 文件系統支持
3. 浮點類型
? symbian os通過TReal32(C++ float類型)和TReal64(C++ double類型)來支持浮點型,模擬器基于Intel x86處理器,所以在硬件上支持這種浮點類型。而真機硬件不一定支持。當程序中大量使用浮點型函數的時候,你就需要注意由于真機沒有硬件支持額頭導致的性能上的巨大差距。
4. 機器字節對齊
? 為了降低成本和能耗,ARM采用32位 RISC架構。因此32位的變量必須按32位機器字節邊界對齊,換言之,其地址必須是4的倍數。舉個例子,
? TInt* p; // pointer to integers
...
TInt i=*p; // get from a pointer
這段代碼只有當P的地址是4的倍數時能正常工作,否則就會報訪問沖突錯誤。
? 一般來說,這種限制對程序員是透明的,因為結構體和類成員會被編譯器自動補齊。而當碰到下面這樣的代碼時,字節對齊的限制就要注意了。
TText8 array[200];
for (TInt i=0; i<=196; i++)
??? {
??? TInt* p=(TInt*) array[i]; // needs a cast
??? TInt n=*p; // four bytes from the array makes one integer?
??? }
這樣的代碼在模擬器工作沒問題,在真機上編譯也沒問題,但在循環到第2次時發生訪問沖突,因為p的地址比4的倍數大1.
為了避免這樣的問題,你可以這樣寫:
? TText8 array[200];
for (TInt i=0; i<196; i++)
??? {
??? TAny* p=array[i]; // really a TAny*, so no cast needed!
??? TInt n;
??? Mem::Copy(&n, p, sizeof(TInt)); // copy byte by byte
}
5.內存限制
? 模擬器默認總的堆容量為64MB,這個值可用MegabytesOfFreeMemory關鍵字來設置。可以用mmp文件的epocheapsize關鍵字來設置程序的默認堆的初始和最大尺寸,
? 在真機上程序默認的棧大小只有8K,而模擬器上棧可以大到Windows的上限。因為程序在模擬器上濫用棧空間可能沒問題,但在真機就會報棧溢出kern –exec 3錯誤。在mmp里使用epocstacksize關鍵字設置程序使用的棧大小(模擬器不支持該關鍵字)
6.?進程模擬
7.?時間表
8.?串口
9.?計時器

總結

以上是生活随笔為你收集整理的模拟器与真机的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。