2013-03-31 33 views
1

我試圖將傳統32位代碼移植到64位。因爲我們有這樣一個工會:將遺留代碼移植到C++中的64位

union ptType 
{ 
    int * iPtr; 
    short * sPtr; 
    long * lPtr; 
    bool * bPtr; 
    double * dPtr; 
}; 

正如你所猜測的,這個聯合是用來存儲所有這些類型的地址。我已經閱讀了大量的指針大小和64位算術改變。但我不太確定這種行爲。此代碼似乎在質量保證工作,但我更關心生產,因爲它會在那裏的巨大流量。

如何移植到64位會影響代碼的行爲?

+0

你還沒有告訴我們當前的行爲的代碼,所以我們怎麼知道它會如何改變? –

+2

數據類型本身沒有行爲。 ptType是一個數據類型。當其他代碼使用時,我會有行爲。那麼您關心的是什麼用法?您可以使用您關心的工會發布代碼嗎? – user93353

+0

我的擔心是枚舉指針被存儲,隨後使用int指針進行訪問。它在這種特殊情況下會如何表現?我們正在運行的編譯器將所有指針設置爲相同大小。但我認爲它不能保證。 – naveen

回答

3

你說得對,在大多數32位到64位的轉換下,這些指針的大小都會增加一倍。這個聯盟本身的運作不太可能是個問題,但是你必須注意與其他代碼交互的地方,通過類型轉換,硬編碼大小等。

+0

考慮到原始代碼對事物有一些自由度,更大的擔心就是像排序和字對齊這樣的問題。 –

+0

32位到64位的轉換幾乎都意味着英特爾,不是嗎?在這種情況下,無論是排序還是排列都可能成爲問題。也許一些結構填充 - 但這對於這個聯盟來說不是問題。 –

+1

@HotLicks - 最初的代碼是什麼?你怎麼知道的? – user93353