在分析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平台...