怎樣在不同平台間定義資料

2021-06-16 07:40:07 字數 1125 閱讀 5079

在分析mdns原始碼時遇到這樣一句**:

#if defined(_lp64) || defined(__lp64__)

typedef   signed int   mdnss32;

typedef unsigned int   mdnsu32;

#elif defined(_ilp64) || defined(__ilp64__)

typedef   signed int32 mdnss32;

typedef unsigned int32 mdnsu32;

#else

typedef   signed long  mdnss32;

typedef unsigned long  mdnsu32;

#endif

這句程式是用來將程式移植到64位平台時在32位和64位程式之間共享和讀取資料的,就此段而言:就是在64位和32位下都將mdnss和mdnsu定義為32位的資料。

為了方便理解這裡給出了資料模型:

32位環境涉及"ilp32"資料模型,是因為c資料型別為32位的int、long、指標。而64位環境使用不同的資料模型,此時的long和指標已為64位,故稱作"lp64"資料模型。

現今所有64位的類unix平台均使用lp64資料模型,而64位windows使用llp64資料模型,除了指標是64位,其他基本型別都沒有變。

type               lp32  ilp32  lp64  ilp64  llp64

char                8         8          8         8         8

short             16       16        16       16       16

int                  16       32        32        64      32

long               32       32        64       64       32

long long     64       64        64       64       64

pointer          32       32        64       64       64

怎樣在不同執行緒間實現對檔案的同步操作

採用了乙個核心類 org.apache.commons.io.output.lockablefilewriter 該類在例項化的時候會在臨時資料夾建立乙個lock檔案,close的時候刪除該lock檔案。根據這個lock的存在與否來判斷目標檔案是否被鎖定。如果目標檔案使用中,那麼建立lock檔案會丟...

怎樣在不同執行緒間實現對檔案的同步操作

採用了乙個核心類 org.apache.commons.io.output.lockablefilewriter 該類在例項化的時候會在臨時資料夾建立乙個lock檔案,close的時候刪除該lock檔案。根據這個lock的存在與否來判斷目標檔案是否被鎖定。如果目標檔案使用中,那麼建立lock檔案會丟...

原 定義不同平台通用的巨集

有時候我們希望定義同乙個巨集,但是在選擇不同平台進行編譯的時候希望該巨集的值指向不同的值。類似vs自帶的platform巨集,在win32平台編譯的時候,該巨集指向win32,在選擇x64平台進行編譯的時候,該巨集指向x64。如下圖 如果我們想定義乙個巨集,在win32平台下指向x86 在x64平台...