Потенциальные проблемы с портированием на разные архитектуры - PullRequest
4 голосов
/ 22 апреля 2010

Я пишу программу для Linux, которая в настоящее время компилируется и прекрасно работает на x86 и x86_64, и теперь мне интересно, нужно ли что-то особенное, чтобы она работала на других архитектурах.

Я слышал, что для кроссплатформенного кода мне нужно:

  • Не предполагайте ничего о размере указателя, int или size_t
  • Не делайте предположений о порядке следования байтов (я не делаю сдвига битов - я предполагаю, что gcc оптимизирует мою степень двух умножения / деления для меня)
  • Не использовать монтажные блоки (очевидно)
  • Убедитесь, что ваши библиотеки работают (я использую SQLite, libcurl и Boost, которые кажутся довольно кроссплатформенными)

Есть ли еще что-то, о чем мне нужно беспокоиться? В настоящее время я не ориентируюсь на какие-либо другие архитектуры, но в какой-то момент я ожидаю поддержки ARM, и я думаю, что с таким же успехом могу заставить его работать на любой архитектуре.

Кроме того, что касается моего второго пункта о порядке байтов, нужно ли делать что-то особенное с вводом текста? Я читаю файлы с getline(), так что, похоже, это тоже нужно делать автоматически.

1 Ответ

3 голосов
/ 22 апреля 2010

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

Обратите внимание на все, что может зависеть от платформы: полагаться на выравнивание битовых полей одинаковым образом, предполагая, что переменные имеют определенный размер и т. Д.Если ваш код относительно отвлечен от аппаратного обеспечения, вы, скорее всего, столкнетесь с несколькими проблемами.Если вы делаете что-то с сетевым кодом, вам необходимо убедиться, что вы правильно настроили сетевой порядок байтов.

Я перенес драйверы устройств с PPC на x86, а затем на x86_64;в нескольких тысячах строк, возможно, произошла пара изменений, в первую очередь связанных со структурой и целочисленным упорядочением.

Единственный способ узнать наверняка - это попробовать, конечно.

...