Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Перенос устаревшего кода на 64-битный в C++

Автор вопроса: naveenОтветов: 1

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

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

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

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

  • Вы не рассказали нам о текущем поведении кода, так откуда мы можем знать, как он изменится? Alexey Frunze 31.03.2013
  • Тип данных не имеет поведения сам по себе. ptType - это тип данных. У меня будет поведение, когда оно используется другим кодом. Итак, какое использование вас беспокоит - можете ли вы опубликовать код, используя объединение, которое вас беспокоит? user93353 31.03.2013
  • Меня беспокоит то, что указатель перечисления сохраняется, а позже к нему обращаются с помощью указателя int. Как он поведет себя в данном конкретном случае? Компилятор, который мы запускаем, имеет все указатели одинакового размера. Но я думаю, что это не гарантировано. naveen 31.03.2013

c++32bit-64bit

Ответы

Ответ 1 · рейтинг 3 · Carl Norum

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы