2012-05-10 3 views
1

Предположим, что это для 32-разрядного приложения. У меня есть два значения ID, которые вместе однозначно идентифицируют конкретный объект. Каждый идентификатор представляет собой простой 32-битный int, поэтому, чтобы идентифицировать какой-либо конкретный объект, мне нужно сохранить оба идентификатора.Struct vs int64 value

Первое решение, которое приходит на ум, чтобы хранить их в виде двух отдельных значений, и передать их вокруг в структуры:

struct { 
    int id1; 
    int id2; 
}; 

Однако, было бы хорошо, если бы я мог передать их вокруг, как единственное значение, а не пара структур, как я это сделал, когда было только одно 32-битное значение ID.

Итак, другая идея состоит в том, чтобы хранить их как верхнюю и нижнюю половинки uint64_t.

Мой вопрос в том, есть ли реальная разница между двумя методами? В любом случае, такое же количество байтов передается, но я не знаю, есть ли какие-либо специальные накладные расходы для int64, поскольку процессор не выполняет обработку 64-битных значений.

+0

«Первое решение, которое приходит на ум ... *« Решение какой проблемы? – ildjarn

+0

Структура * - это одно значение. Как вы говорите, вам нужно пройти 8 байтов в любом случае. –

+0

@ildjarn Вероятно, чтобы пройти два идентификатора вокруг, я предполагаю, что это вытекает из остальной части вопроса. –

ответ

1

Если вы не можете решиться, используйте союз.

Microsoft, например, определяет LARGE_INTEGER union.

2

Нет причин не использовать структуру.

+4

Конечно, есть. 'uint64_t' определяет некоторые удобные операторы, такие как' == 'и' <', которые вам нужно будет генерировать вручную для структуры. –

+0

@Mark: Хорошая точка, но только если у этих операторов есть ожидаемое поведение для Nairou. Если он не хочет лексикографического сравнения, ему все равно придется реализовать операторы равенства (in), а затем простая структура может быть более простой. –

+0

@MarkRansom: Если OP указал, что он хотел их ...? – Puppy

5

Лучшая обработка зависит от того, как обрабатывается объект. Если это обычно/в основном сравнение двух подполей как единицы, то int64 имеет силу. Если он часто анализирует подполя независимо, структура более естественна.