C++ C++;:32位到64位的迁移
我正在进行一个项目,将32位C++ C++;:32位到64位的迁移,c++,macos,64-bit,C++,Macos,64 Bit,我正在进行一个项目,将32位C++代码迁移到MacOSX上的32位和64位模式。我对某些事情感到困惑。例如,考虑下面的代码行-< /P> long* buffer = new long[VAL]; long var = buffer[0]; 现在,我知道sizeof(long)将以32位返回4,以64位返回8。因此,我不知道应该用什么来代替上述两行,以便这些行在32位和64位模式下都能正常工作 这听起来可能是一个微不足道的问题,但我只是无法在我正在从事的项目中大量存在的此类问题上取得任何进展
C++
代码迁移到MacOSX
上的32位和64位模式。我对某些事情感到困惑。例如,考虑下面的代码行-< /P>
long* buffer = new long[VAL];
long var = buffer[0];
现在,我知道sizeof(long)
将以32位返回4
,以64位返回8
。因此,我不知道应该用什么来代替上述两行,以便这些行在32位和64位模式下都能正常工作
这听起来可能是一个微不足道的问题,但我只是无法在我正在从事的项目中大量存在的此类问题上取得任何进展
一般来说,我不知道应该用什么来替换上述两行,以便这些行在32位和64位模式下都能正常工作
答案取决于“正确工作”的含义
如果您希望使用具有特定大小的整数(即所有平台上的32位或所有平台上的64位),请使用
中的定义:int32\u t
用于32位,int64\u t
用于64位。无论平台如何,这都将确保精确的尺寸
如果您所需要的只是您自己的程序内的互操作性,那么您可以让一切保持原样:在使用最短
long
的平台上没有溢出的情况下,程序将在使用较长long
的平台上执行相同的操作,除了需要更多的内存之外。为什么需要更换?这些行有什么问题?依赖于var
的变量将在32位和64位模式下返回不同的值,代码将变得不一致。我认为这是一件好事。这将随系统扩展。您能给出一个程序(实际编译;什么是新缓冲区[VAL]
?)来说明差异吗?分配nlong
s和读/写它们中的任何一个都应该表现相同,而不管long
的大小,当然是模溢出。可移植性问题只有在你做一些愚蠢的事情时才会出现,比如向long
抛出指针,或者用类型双关语将long
解释为float
或诸如此类。既然你在那里,为什么不从正确的类型开始呢?也就是说,你为什么试图将一个缓冲区*
(实际上是一个无效*
)转换成一个完全不相关的类型,长*
?你能解释一下“你自己的程序内的互操作性”是什么意思吗?@Sankalp我指的是类似于你在文章中所写的代码,即在相同类型的位置之间传输,例如var
和buffer[0]
这两种类型都是long
。