2013-03-31 31 views
1

我试图将传统32位代码移植到64位。因为我们有这样一个工会:将遗留代码移植到C++中的64位

union ptType 
{ 
    int * iPtr; 
    short * sPtr; 
    long * lPtr; 
    bool * bPtr; 
    double * dPtr; 
}; 

正如你所猜测的,这个联合是用来存储所有这些类型的地址。我已经阅读了大量的指针大小和64位算术改变。但我不太确定这种行为。此代码似乎在质量保证工作,但我更关心生产,因为它会在那里的巨大流量。

如何移植到64位会影响代码的行为?

+0

你还没有告诉我们当前的行为的代码,所以我们怎么知道它会如何改变? –

+2

数据类型本身没有行为。 ptType是一个数据类型。当其他代码使用时,我会有行为。那么您关心的是什么用法?您可以使用您关心的工会发布代码吗? – user93353

+0

我的担心是枚举指针被存储,随后使用int指针进行访问。它在这种特殊情况下会如何表现?我们正在运行的编译器将所有指针设置为相同大小。但我认为它不能保证。 – naveen

回答

3

你说得对,在大多数32位到64位的转换下,这些指针的大小都会增加一倍。这个联盟本身的运作不太可能是个问题,但是你必须注意与其他代码交互的地方,通过类型转换,硬编码大小等。

+0

考虑到原始代码对事物有一些自由度,更大的担心就是像排序和字对齐这样的问题。 –

+0

32位到64位的转换几乎都意味着英特尔,不是吗?在这种情况下,无论是排序还是排列都可能成为问题。也许一些结构填充 - 但这对于这个联盟来说不是问题。 –

+1

@HotLicks - 最初的代码是什么?你怎么知道的? – user93353