2013-07-31 75 views
0

我的問題是,我想將結構形式的32位空間移動到64位空間。在C編程語言中將結構從32位移動到64位

假設我聲明相同的結構在64位空間與相同的字段,有沒有辦法將相應的字段從32位複製到64位結構?

讓我來介紹一下實際的問題,這與高速緩存的東西有關,我們限制RAM的大小是32位空間,所以如果我們在RAM上有1G空間,並且單個高速緩存對象的結構大小是1M,那麼我可以存儲的對象數量限制爲1G/1M。因此爲了解決這個probem我想聲明在64位spcace我的結構(以便沒有spcace緊縮)和對象的數量可以incrased爲無窮幾乎

假設我們有在32位空間的結構

typedef struct x{ 
int a ; 
int *b ; 
} x_t; 

現在我想在64位空間中移動此結構,刪除32位空間結構。

typedef struct x_64{ 
    int a ; 
    int *b ; 
    } x_64_t; 

所以,如果我的先前變量等的x訪問> B或x.a,我怎樣才能確保相同的值被髮送到64位的結構,無需在整個代碼的功能的變化。

一種方法可以是在64位空間中有一個緩衝區,對於32位空間中的變量的每個訪問都可以將64個寫入/讀入緩衝區。但那是一個乏味的過程,可以有一些選擇嗎?

+7

歡迎計算器,你可能想向我們展示一些你正在嘗試做的事情的代碼,因爲目前還不清楚你試圖達到的目標。 – hetepeperfan

+0

讓我來介紹一下實際的問題,這與緩存的東西有關,我們在RAM上的大小是32位,所以如果我們在RAM上有1G空間,並且單個緩存對象的結構大小是1M,那麼我可以存儲的對象數量限制爲1G/1M。因此爲了解決這個問題,我想用64位spcace來聲明我的結構(這樣就沒有spcace緊縮),並且實際上對象的數量可以無限增加。 – kharevbv

+0

請更新問題,其他用戶與您的特定問題將在那裏尋找信息,而不是在評論中。 – hetepeperfan

回答

4

只要您使用兼容的數據類型,就可以在32位和64位之間複製數據。

例如,以下結構:如果你的int類型是在32位和64位的世界不同寬度的

struct xyzzy { 
    int a; 
    int b; 
} 

將不兼容。

C99提供了固定寬度類型,例如int32_t,它們的大小是相同的,與平臺無關。如果您的編譯器符合規範,則需要提供這些類型(如果它具有該尺寸的實際的類型)。

如果做不到這一點,你可以經常改變你的源代碼,使這些問題最小化,比如有:

#ifdef INT_IS_64BITS 
    typedef int my_64bit_type; 
#endif 

#ifdef LONG_IS_64BITS 
    typedef long my_64bit_type; 
#endif 

my_64bit_type xyzzy; 

,並用合適的定義編譯:

gcc -DLONG_IS_64BITS myprog.c 
+0

是什麼讓你認爲這個問題是關於一個32位/ 64位_architecture_? – moooeeeep

+0

鑑於可用的信息,我最好的(受過教育的)猜測。在OP澄清之前,沒有更多的繼續。 – paxdiablo