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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

从X86向X64迁移的一点心得

發(fā)布時(shí)間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从X86向X64迁移的一点心得 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

X64平臺(tái)越來(lái)越普及,目前一些分析軟件多推出了X64版本,而我們的工具集項(xiàng)目同樣也有X64版本。我們基于同一套標(biāo)準(zhǔn)C++代碼實(shí)現(xiàn)了Windows和Linux的跨平臺(tái),這幾天從X86平臺(tái)向X64平臺(tái)遷移的過(guò)程中,卻遇到了一點(diǎn)麻煩,也學(xué)到了一招:(以下內(nèi)容均限定在wintel+vc 10.0編譯器)

假如我有一個(gè)類(lèi)ClassA

class ClassA {...public:int search(Filter, void**);... };

ClassA的1個(gè)查詢(xún)方法(例如空間查詢(xún))search接收一個(gè)查詢(xún)過(guò)濾器,返回void*數(shù)組,在search函數(shù)的實(shí)現(xiàn)中,采用下面語(yǔ)句:

malloc(sizeof(void*)*count);

好,接下來(lái)考慮如下兩種調(diào)用情形:

long* r_lst1 = NULL; void* r_lst2 = NULL; int r1 = ClassAObj->search(flt, r_lst1); int r2 = ClassAObj->search(flt, r_lst2);

顯然,不管什么平臺(tái),條件相同的查詢(xún)得到的結(jié)果數(shù)量肯定是相同的,也就是有r1==r2;

且在32位平臺(tái)下,r_lst1與r_lst2將不會(huì)有任何區(qū)別;

但是在x64平臺(tái)下,r_lst1在外部顯式地聲明為long*類(lèi)型,而long類(lèi)型在32和64位下均占4個(gè)字節(jié),但是在函數(shù)實(shí)現(xiàn)中采用void*類(lèi)型申請(qǐng)內(nèi)存,void*在32位下占4個(gè)字節(jié),而在64位平臺(tái)上占8個(gè)字節(jié),這樣在外部使用r_lst1[i]形式訪(fǎng)問(wèn)r_lst1中的元素時(shí),就會(huì)帶來(lái)錯(cuò)誤。

反過(guò)來(lái)看第二次查詢(xún)操作,x64平臺(tái)下它在外部聲明的void*本身為8字節(jié)長(zhǎng)度,因此不會(huì)帶來(lái)函數(shù)內(nèi)外數(shù)據(jù)類(lèi)型字節(jié)長(zhǎng)度不一致的問(wèn)題。

因此在這樣的一些查詢(xún)操作中,與其將對(duì)象的標(biāo)識(shí)符(通常為整數(shù))作為查詢(xún)的預(yù)期結(jié)果元素放入索引結(jié)構(gòu)中,自行在外部處理跨平臺(tái)問(wèn)題,不如直接將所操作的對(duì)象指針?lè)湃胨饕Y(jié)構(gòu),這樣采用void*來(lái)進(jìn)行操作,就避免了數(shù)據(jù)類(lèi)型轉(zhuǎn)換帶來(lái)的字節(jié)長(zhǎng)度不一致的問(wèn)題,同時(shí)在內(nèi)存中操作數(shù)據(jù)也更加便捷,省去了查詢(xún)到標(biāo)識(shí)符再去取對(duì)象數(shù)據(jù)的過(guò)程,可通過(guò)直接cast來(lái)獲得要操作的對(duì)象,缺點(diǎn)是查詢(xún)過(guò)程中對(duì)象占用內(nèi)存。

在GIS中需要跨平臺(tái)(特別是x86+x64)的空間查詢(xún)優(yōu)化過(guò)程中可考慮該技巧。

?

轉(zhuǎn)載于:https://www.cnblogs.com/yeahgis/archive/2013/05/08/3067845.html

總結(jié)

以上是生活随笔為你收集整理的从X86向X64迁移的一点心得的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。