我一直在努力與一個非常簡單的問題......我正在與使用AVL樹木的4維立方體......現在的問題是性能相關的...基本上,我必須比較數十億的64位數字...(因爲我的密鑰是64位,包括每個16位的四維)...最有效的方法來比較兩個__int64數字並得到-1,0,1
問題不是我無法比較2個64位數字,但我需要儘可能少的時鐘週期。
不幸的是我的AVL樹模板具有的簽名「INT CompareKeyNode(密鑰K,處理八)」
引擎蓋下,我有兩個__int64數字LHS & RHS,這種方法很不幸的合同: 1 。LHS == RHS返回0 2. LHS> RHS返回1 3. LHS < RHS返回-1
現在,如果上述方法中的預期數__int64我可以簡單地做一個(方法A)返回LHS - rhs;
不幸的是,它只需要一個32位的整數,所以我不得不求助於類似於((METHOD B))ie。返回lhs == rhs? 0:(左< RHS -1:1)
到我的問題是,使用(方法A)開秒,而(方法B)開秒加載我的數據。
不幸的是(方法A)是不正確的,因爲它失去了投射lhs -rhs語句的返回精度。
的處理時間是我重要,我相信一定有它躲避我現在一個簡單而有效的答案...
有誰知道如何解決這個問題的想法?或者也許有任何建議?
我正在VC++(un-managed)中工作,但是肯定.NET/Java必須在JITing/VM階段解決了這個問題......否則他們會受到巨大的性能影響。
PS:試過memcmp(),但還不夠好......
不幸的是,它是在C++中,而不是程序集...但很好的答案... – MarineHero 2010-07-06 01:11:35
如果速度是如此關心,它可能實際上值得內聯程序集 - C++允許這樣做。例如,*** http://www.codeproject.com/KB/cpp/edujini_inline_asm。aspx *** 如果當然你可能要學習大會。那麼你也可能會發現,在所有這些工作之後它並不是那麼快! – FastAl 2010-07-06 01:27:28
@MarineHero:有沒有理由不能爲此添加一些內聯程序集? – 2010-07-06 01:27:56