2014-12-27 13 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 

的首选方法是设置你的编译器的目标架构。许多编译器都有大量预定义的体系结构可供选择。