2012-05-10 50 views
1

假設這是用於32位應用程序。我有兩個ID值一起唯一標識一個特定的對象。每個ID是一個普通的32位int,所以爲了識別任何特定的對象,我需要將兩個ID值保持在一起。結構與int64值

,想到的第一個解決方案是將它們作爲兩個獨立的價值觀,並在結構通過他們周圍:

struct { 
    int id1; 
    int id2; 
}; 

然而,這將是很好,如果我可以通過他們周圍的單值而不是結構對,正如我僅在一個32位ID值時所做的那樣。

所以,另一個想法是將它們存儲爲uint64_t的上下兩半。

我的問題是,這兩種方法之間有沒有真正的區別?無論哪種方式,傳遞相同數量的字節,但我不知道是否有任何特殊的開銷int64,因爲CPU本身不處理64位值。

+0

「*想到第一個解決方案... *」解決什麼問題? – ildjarn

+0

struct *是一個單一的值。正如你所說,你必須通過任何方式傳遞8個字節。 –

+0

@ildjarn可能要傳遞兩個ID,我想這是問題的其餘部分所暗示的。 –

回答

1

如果您無法下定決心,請使用工會。

微軟例如定義了一個LARGE_INTEGER union

2

沒有理由不使用該結構。

+4

當然有。 'uint64_t'定義了一些方便的操作符,例如'=='和'<',你必須手動爲這個結構生成。 –

+0

@Mark:好點,但前提是這些運營商對Nairou有預期的行爲。如果他不想進行詞典對比,那麼他將需要實現(in)等於運算符,然後一個簡單的結構可能會更直接。 –

+0

@MarkRansom:如果OP表示他想要他們......? – Puppy

5

最好的處理取決於實體如何處理。如果通常/主要將兩個子字段作爲一個單元進行比較,那麼int64具有有效性。如果它經常獨立地檢查子域,那麼結構更自然。