2012-05-10 43 views
1

假设这是用于32位应用程序。我有两个ID值一起唯一标识一个特定的对象。每个ID是一个普通的32位int,所以为了识别任何特定的对象,我需要将两个ID值保持在一起。结构与int64值

,想到的第一个解决方案是将它们作为两个独立的价值观,并在结构通过他们周围:

struct { 
    int id1; 
    int id2; 
}; 

然而,这将是很好,如果我可以通过他们周围的单值而不是结构对,正如我仅在一个32位ID值时所做的那样。

所以,另一个想法是将它们存储为uint64_t的上下两半。

我的问题是,这两种方法之间有没有真正的区别?无论哪种方式,传递相同数量的字节,但我不知道是否有任何特殊的开销int64,因为CPU本身不处理64位值。

+0

“*想到第一个解决方案... *”解决什么问题? – ildjarn

+0

struct *是一个单一的值。正如你所说,你必须通过任何方式传递8个字节。 –

+0

@ildjarn可能要传递两个ID,我想这是问题的其余部分所暗示的。 –

回答

1

如果您无法下定决心,请使用工会。

微软例如定义了一个LARGE_INTEGER union

2

没有理由不使用该结构。

+4

当然有。 'uint64_t'定义了一些方便的操作符,例如'=='和'<',你必须手动为这个结构生成。 –

+0

@Mark:好点,但前提是这些运营商对Nairou有预期的行为。如果他不想进行词典对比,那么他将需要实现(in)等于运算符,然后一个简单的结构可能会更直接。 –

+0

@MarkRansom:如果OP表示他想要他们......? – Puppy

5

最好的处理取决于实体如何处理。如果通常/主要将两个子字段作为一个单元进行比较,那么int64具有有效性。如果它经常独立地检查子域,那么结构更自然。