2013-03-31 3 views
1

Я пытаюсь перенести старый 32-разрядный код на 64 бит. В этом случае у нас есть такой союз:Портирование кода устаревшего кода на 64 бит в C++

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

Как вы можете догадаться, этот союз используется для хранения адресов всех этих типов. Я читал о большом размере указателя и изменении арифметики в 64 бит. Но я не слишком уверен в этом поведении. Этот код, похоже, работает в QA, но я больше опасаюсь производства, так как там будет огромный трафик.

Как портирование на 64 бит влияет на поведение кода?

+0

Вы не сказали нам о текущем поведении кода, так как мы можем знать, как это изменится? –

+2

Тип данных не имеет собственного поведения. ptType - это тип данных. У меня будет поведение, когда оно используется другим кодом. Итак, какое использование вас беспокоит - можете ли вы опубликовать код, используя профсоюз, о котором вы беспокоитесь? – user93353

+0

Я забочусь о том, что указатель перечисления хранится, а позже он открывается с помощью указателя int. Как он будет себя вести в этом конкретном случае? У компилятора, который мы запускаем, все указатели имеют одинаковый размер. Но я думаю, что это не гарантировано. – naveen

ответ

3

Вы правы, что при большинстве переходов от 32 до 64 бит эти указатели будут удвоены по размеру. Работа этого союза сама по себе вряд ли будет проблемой, но вам придется искать места, где он взаимодействует с другим кодом, с помощью типов, жестко закодированных размеров и т. Д.

+0

Более серьезной проблемой могут быть такие вопросы, как конкретизация и выравнивание слов, учитывая, что исходный код принимает несколько свобод с вещами. –

+0

32- до 64-битного перехода почти всегда означает Intel, не так ли? В этом случае, как правило, не вызывает беспокойства ни утверждение, ни согласование. Возможно, какая-то структура дополняет - но это не проблема для этого союза. –

+1

@HotLicks - Какие свободы - это исходный код? И откуда вы знаете? – user93353

Смежные вопросы