2014-12-27 14 views
2

我遇到問題。當我編譯我的項目時,我有sizof(long int) = 8sizof(int) = 4。不過,我需要sizeof(long int)也是4。有沒有辦法做到這一點? 問題是我有很多龐大的int數組,需要將它們賦給long int數組。如果我將所有數組轉換(特別是表示轉換數組的每個條目),會導致很多時間。如何強制長爲4字節

+2

http://stackoverflow.com/questions/4244311/gcc-width-of-long-int-on-different-architectures – NPE

+1

從'long int'中刪除所有'long',或者替換/重新定義'long int' 'int32_t' –

+0

你有沒有試過,或者你只是假設它會很慢?速度幾乎肯定是內存帶寬限制。 – MSalters

回答

6

您不能強制LP64平臺(或陌生人平臺)上的內置long int類型長度爲4個字節。

但是,您可以使用<stdint.h>中的類型來確保變量的確切大小。

對於您的情況,您需要將int32_tuint32_t作爲您的類型,具體取決於您是否需要/需要符號位。

0

您可能能夠告訴編譯器您所定位的平臺或使用編譯器特定的命令來告知編譯器您的變量的大小。

另一種方法是使用宏和定義它根據你的平臺上:

#if PLATFORM_USES_8_BYTE_LONG 
#define MY_LONG_INT int32_t 
#else 
#define MY_LONG_INT long int 
#endif 

的首選方法是設置你的編譯器的目標架構。許多編譯器都有大量預定義的體系結構可供選擇。