в настоящее время я работаю над преобразованием приложения 32bits в приложение 64bits в C. Это приложение в настоящее время работает над архитектурой x86 (Windows, osx, Unix, Linux). Итак, прежде чем начать кодирование, я хотел знать, что мне нужно учитывать при преобразовании приложения.
автор: Charles Beaudoin
9 ответов
- узнайте, кто это написал. Они что, идиоты? Они вы несколько лет назад? Вы можете задать им вопросы? Знакомы ли они с существованием нескольких платформ и систем? Зная склад ума автора(ов) программы поможет вам понять проблемы, когда вы столкнетесь с ними.
- получить 64-разрядную машину / среду сборки и работает.
- заменить long на int. Имейте в виду, что LONG не long .
- заменить (int)x С uintptr_t
- аудит все, что полагается на кастинг структуры char* чтобы сделать арифметику указателя с ним.
- Regex поиск в случае, если вы предположили 4 = sizeof(void*)
- будьте терпеливы. Когда вы обнаружите проблему, посмотрите в другом месте, если такая же проблема существует, и оберните решение в макрос.
- старайтесь не использовать #ifdef RUN64 или что-нибудь подобное. Ты пожалеешь. это если 128-битные платформы когда-либо войдут в моду.
- Инкапсулируйте все ваши изменения в терминах некоторых централизованных макросов, которые скроют различия в переносимости в другом месте вашей программы.
- используйте тестер покрытия, чтобы убедиться, что вы покрыли все (если это необходимо)
редактировать добавил uintptr_t примечание в соответствии с комментарием.
Как открыть 32 битные плагины в 64 битной DAW. Быстрый лайфхак
автор: geocar
одна потенциальная проблема, еще не упомянутая, заключается в том, что если ваше приложение читает или записывает двоичные данные с диска (например, читает массив структур с помощью fread ), вам придется очень тщательно проверить и, возможно, в конечном итоге иметь два читателя: один для устаревших файлов и один для 64-битных файлов. Или, если вы осторожны, чтобы использовать такие типы, как uint32_t и т. д. файл заголовка, вы можете переопределить свои структуры, чтобы быть бит-за-бит совместимыми. Во всяком случае,двоичный ввод-вывод — это вещь чтобы остерегаться.
автор: Norman Ramsey
Это действительно зависит от приложения и как они были закодированы. Некоторый код можно просто перекомпилировать с помощью 64-битного компилятора, и он будет просто работать, но обычно это происходит только в том случае, если код был разработан с учетом переносимости.
Если код имеет много предположений о размере собственных типов и указателей, если у него много битных хаков упаковки или он разговаривает с внешним процессом, используя байтовый указанный протокол, но используя некоторые предположения о размере собственного тогда для получения чистой компиляции может потребоваться некоторая или большая работа.
почти каждое предупреждение о приведении и компиляторе-это красный флаг, который нужно проверить. Если код не был» предупреждающим чистым » для начала, это также признак того, что может потребоваться много работы.
Как перейти с 32 bit на 64 bit Windows 7 без флешки или диска и без потери данных
автор: CB Bailey
если вы использовали правильные типы для своих значений-например. size_t , ptrdiff_t , uintptr_t , типы int фиксированного размера от stdint.h где уместно — и не hardcode размеры значения, ваш код должен работать из коробки.
автор: Christoph
основная проблема, с которой вы сталкиваетесь при переключении на 64 бит, заключается в том, что размер указателей отличается (64 бит вместо 32 — duh), размер целых чисел и размер лонгов также могут отличаться в зависимости от платформы.
Почему это проблема? Ну, это не так, если ваш код не предполагает, что sizeof(int) == sizeof(void*). Это может привести к неприятным ошибкам указателя.
автор: gnud
ну, в принципе, количество изменений довольно мало, но это все равно будет серьезной задачей, если приложение не будет тщательно написано, чтобы быть несколько портативным для начала.
основное отличие заключается в том, что указатели имеют ширину 64 бит,но большинство других типов данных, остаются неизменными. Int все еще 32 бит, и длинный, вероятно, также все еще 32 бит. Поэтому, если ваш код бросает между ints и указателями, это сломается. Аналогично, любая структура или подобное, которая зависит при определенном смещении к члену может произойти разрыв, потому что другие члены теперь могут быть больше, и поэтому измените смещение.
конечно, ваш код никогда не должен полагаться на эти трюки в первую очередь, поэтому в идеальном мире это не будет проблемой вообще, и вы можете просто перекомпилировать, и все будет работать. Но вы, вероятно, не живете в идеальном мире. 😉
автор: jalf
двумя основными различиями между 32-битным и 64-битным программированием в C являются sizeof(void*) и sizeof(long). Основная проблема заключается в том, что большинство систем Unix используют стандарт I32LP64, который определяет длину 64 бита, а Win64 использует стандарт IL32LLP64, который определяет длину 32 бита. Если вам нужна поддержка кросс-платформенной компиляции, вы можете использовать набор typedefs на основе архитектуры для 32-разрядных и 64-разрядных целых чисел, чтобы гарантировать, что весь код будет вести себя последовательно. Это предусмотрено как часть stdint.h как часть стандарта C99. Если вы не используете компилятор C99, вам может потребоваться выполнить собственный эквивалент
Как отмечалось в другом месте, основными проблемами для преобразования будет код, который предполагает sizeof(int) == sizeof(long) == sizeof (void*), код для поддержки данных, записанных на диск, и код для кросс-платформенной IPC.
для хорошего обзора истории позади этого, взгляните на это статьи от Очередь ACM.
автор: Jeffrey Cohen
есть много хороших ответов уже.
рассмотрите возможность использования Gimpel Lint. Он может точно указать типы конструкций, которые являются проблематичными. Если ваш опыт похож на мой, он также покажет вам много ошибок в системе, не связанных с 32/64 бита порта.
Источник: askdev.ru
Изменение Приложения Microsoft 365 установки с 32-разрядной на 64-разрядную
До сих пор, если на устройстве установлена 32-разрядная версия Приложения Microsoft 365 и вы хотите изменить ее на 64-разрядную, необходимо удалить существующую 32-разрядную версию, а затем установить 64-разрядную версию. Кроме того, необходимо учитывать все остальные параметры развертывания, настроенные для этого устройства, такие как путь обновления и установленные языки, чтобы эти параметры были включены при установке 64-разрядной версии.
Но теперь, чтобы упростить переход с 32-разрядной на 64-разрядную установку Приложения Microsoft 365, средство развертывания Office и его configuration.xml файл поддерживают необязательный атрибут с именем MigrateArch. Если атрибут MigrateArch имеет значение True, установка Приложения Microsoft 365 будет изменена на архитектуру (иногда называемую разрядностью), которая указана в атрибуте OfficeClientEdition.
При использовании MigrateArch вам не нужно учитывать все установленные продукты и языки или другие параметры развертывания. Процесс миграции сохранит их во время процесса миграции. Но если вы хотите внести какие-либо изменения в установленные продукты и языки или другие параметры развертывания, это можно сделать в процессе миграции, явно указав эти параметры в файле configuration.xml. Дополнительные сведения см. в разделе Пример файла configuration.xml для использования со средством развертывания Office.
32-разрядная версия будет удалена, а затем будет установлена 64-разрядная версия.
Требования к использованию атрибута MigrateArch
Чтобы использовать атрибут MigrateArch, вам потребуется следующее:
- По крайней мере, версия 1902 Приложения Microsoft 365 установлена на устройстве, для которого требуется изменить разрядность.
- По крайней мере, версия 16.0.11615.33602 средства развертывания Office из центра загрузки Майкрософт.
- Расположение, содержащее все файлы продуктов и языков для архитектуры, на которую вы изменяете установку.
Перед началом процесса миграции на другой разрядность необходимо установить на устройстве версию 1902 или более позднюю. Миграция разрешена в той же версии или в любую более позднюю версию, но перед началом процесса миграции на устройстве должна быть установлена по крайней мере версия 1902.
Версия 1902 или более поздняя доступна в Current Channel, Monthly Enterprise Channel, Semi-Annual Enterprise Channel (предварительная версия) и Semi-Annual Enterprise Channel.
Предоставление исходного расположения для использования с атрибутом MigrateArch
При использовании атрибута MigrateArch требуется расположение, содержащее исходные файлы установки битовой области, в которую выполняется перемещение.
Для этого расположения, если пропускная способность сети или подключение к Интернету не является проблемой, рекомендуется использовать сеть доставки содержимого Office (CDN), так как cdn всегда будет содержать самые актуальные файлы установки программ и языков, которые вам нужны.
Если вы используете расположение в локальной сети, обязательно используйте средство развертывания Office, чтобы заранее скачать все необходимые файлы продуктов и языков. Вы можете скачать 32-разрядные и 64-разрядные файлы установки в одну и ту же общую папку для заданного канала обновления. Например, можно скачать 32-разрядные и 64-разрядные файлы установки для Semi-Annual Enterprise Channel в папку \server01sec. Но необходимо скачать файлы установки для Current Channel в другое расположение, например \server01current.
Если расположение локальной сети не содержит файлы с правильной разрядностью, миграция завершится ошибкой, и разрядность установки останется без изменений. Если это расположение не содержит все необходимые исходные файлы языка (например, файлы французского языка отсутствуют), миграция завершится ошибкой. Чтобы избежать этой ситуации, настоятельно рекомендуется включить AllowCdnFallback=»True» в файл configuration.xml. В этом случае сеть доставки содержимого (CDN) Office в Интернете будет использована в качестве резервного источника для установки языковых файлов.
Пример файла configuration.xml для использования со средством развертывания Office
Ниже приведен пример configuration.xml, который изменит существующую 32-разрядную установку Приложения Microsoft 365 на 64-разрядную. Все существующие продукты, языки и другие параметры развертывания, такие как путь обновления, будут сохранены.
Затем запустите средство развертывания Office в режиме /configure и укажите этот configuration.xml файл, чтобы изменить 32-разрядную на 64-разрядную. 32-разрядная версия будет удалена, а затем будет установлена 64-разрядная версия.
Если вы хотите изменить установленные продукты или языки или изменить другие параметры развертывания, необходимо указать их в файле configuration.xml. Например, если вы хотите изменить 64-разрядную установку Приложения Microsoft 365 для предприятий на английском языке на 32-разрядную установку с английским и немецким языками, изменить путь обновления и добавить Visio на английском языке, следует использовать файл configuration.xml, который выглядит примерно так, как показано в следующем примере.
Дополнительные сведения об использовании атрибута MigrateArch
- Прежде чем переходить на другую архитектуру, особенно при переходе на 64-разрядную, убедитесь, что существующие надстройки, макросы и сложные файлы Office работают с новой архитектурой. Дополнительные сведения см. в статье Использование набора средств Readiness Toolkit для оценка совместимости приложений с приложениями Microsoft 365.
- Атрибут MigrateArch также можно использовать для изменения архитектуры версий подписки классических приложений Project и Visio.
- Атрибут MigrateArch не переносит разрядность программ Office на устройстве, установленных с помощью установщика Windows (MSI). Эти программы можно удалить с помощью элемента RemoveMSI в файле configuration.xml.
- Атрибут MigrateArch может переносить только продукты Office, установленные с помощью функции «нажми и запускай» и имеющие номер версии, начинающийся с 16.0. Например, нельзя использовать атрибут MigrateArch, если на устройстве был установлен Visio профессиональный 2013 с помощью функции «нажми и запускай», так как версия Visio 2013 имеет номер версии, начинающийся с 15.0. Эти сведения о версии можно найти на> панель управления Программы>Программы и компоненты. Если на устройстве есть продукты Office, установленные с помощью функции «нажми и запускай», и номер версии которых начинается с 15.0, миграция завершится ошибкой.
- Если указанная архитектура для перемещения уже соответствует архитектуре установленных в настоящее время продуктов, миграция не выполняется при запуске средства развертывания Office. Существующая установка не будет удалена и переустановлена. Но если configuration.xml включает другие изменения, например добавление языка, эти изменения будут реализованы.
- Если у пользователя есть приложение Office, например Word, открытое при начале процесса миграции, а атрибут Level имеет значение Full для элемента Display в файле configuration.xml, пользователю будет предложено закрыть приложение. Если они отменят запрос, миграция будет отменена. Если для атрибута Level задано значение Нет, а приложения Office выполняются на устройстве, миграция завершится ошибкой. Вы можете использовать свойство FORCEAPPSHUTDOWN в файле configuration.xml, но это приведет к закрытию приложений пользователя без каких-либо предупреждений.
Статьи по теме
- Общие сведения о средстве развертывания Office
- Настройка средства развертывания Office
- Выбор 64-разрядной или 32-разрядной версии Office
Источник: learn.microsoft.com
Как переключиться с Windows 32 на 64 бита: все плюсы и минусы перехода
Смена разрядности Windows может потребоваться после апгрейда ПК. Но такой переход не всегда удобен и сопряжен с некоторыми проблемами. Мы объясним, как проверить, требуется ли изменение разрядности на вашем ПК и возможно ли оно вообще, после чего покажем, как переключиться с 32 на 64 бита.
Если возникла необходимость, вы можете переключиться с 32-разрядной версии Windows на 64-разрядную. Если речь идет о той же версии Windows 7, 8 или 10, ваша лицензия действительна для обоих вариантов разрядности.
Требуется ли изменение разрядности с 32 до 64 бит?
В первую очередь необходимо определить, есть ли необходимость в переходе на 64 разряда и удовлетворяет ли ваш ПК минимальным требованиям. И поможет в этом набор программ, который расскажет о том, какое оборудование установлено в системном блоке и определит его предел возможностей. Почитать об этих утилитах и скачать их с ресурсов производителей вы можете воспользовавшись нашей статьей Проверь работу компьютера: лучшие бесплатные утилиты для теста ПК=»content_internal_link»>
32-битная или 64-битная версия Windows?
Итак, попробуем узнать, какая версия системы установлена на вашем компьютере: 32 или 64-битная. Разрядность может быть важна, например, если необходимо установить новую программу, предлагающую разные версии. Для начала откройте меню «Пуск», кликните по строке «Панель управления» и перейдите к пункту «Система и безопасность», а затем к пункту «Система». Здесь вы найдете информацию о типе операционной системы: 32 или 64-разрядная операционная система.
Если выясняется, что все-таки Windows 64-разрядная, это еще не значит, что все программы у вас работают в 64-bit режиме. Многие программы имеют только 32-разрядные версии и могут без проблем работать в 64-bit системе.
Если вы хотите перейти от разрядности в 32 бита на разрядность а 64 бита, вам нужно переустановить Windows, полностью перестроив систему. Имеет ли смысл изменять разрядность Windows с 32-битного до 64-битного варианта, во многом зависит от того, какое оборудование и программное обеспечение вы используете или планируете приобрести:
- В операционных системах Windows разрядность описывает длину слова, используемую для адресации к вашей RAM и памяти вашего GPU.
- Если у вас нет технических данных установленной в ПК видеокарты, можно использовать наш практический совет, чтобы узнать, какая память у вашего GPU.
- Используйте наше советы выше, чтобы узнать, какая разрядность у вашего Windows: 32 или 64 бита. Кроме того, вы также можете ознакомиться с нашей статьей по этой теме.
- Только когда объем памяти RAM и GPU превышает 4 гигабайта, Вам стоит переходить от разрядности 32 до 64 бит.
- При определенных обстоятельствах изменение разрядности не стоит приложенных усилий, если вы, например, никогда не используете неадресуемую память. Если вы, к примеру, просто занимаетесь Интернет-серфингом или выполняете базовую офисную работу, вы в большинстве случаев редко используете более одного гигабайта оперативной памяти. Узнайте в нашем практическом совете, сколько оперативной памяти вам нужно.
- И даже если вы временно превысите возможности памяти, например, играя в 3D-игры с большим объемом памяти, занимаясь видеомонтажом или моделированием, переключение разрядности не обязательно станет лучшим решением. В зависимости от программного обеспечения покупка быстрого SSD-накопителя для хранения больших объемов данных может быть значительно более выгодной альтернативой. Например, вам можно будет просто прописать новый путь хранения для программного обеспечения, не настраивая при этом совершенно новую систему.
- С помощью наших инструкций вы все равно можете использовать оперативную память, с непосредственной адресацией, используя ее в качестве энергозависимого пространства на жестком диске, например, для временных файлов.
Возможно ли сменить разрядность?
Можно ли вообще ли даже изменение версии Windows с 32 до 64 бит, зависит от аппаратного обеспечения вашего компьютера:
- Ваш процессор должен иметь возможность обрабатывать 64-разрядные адреса. Самый простой способ узнать, установлен ли у вас 64-разрядный процессор — прочитать эту информацию в руководстве к CPU.
- С помощью советов выше вы можете и без мануала узнать, поддерживает ли ваш компьютер 64-битную разрядность.
- Если ваш процессор не поддерживает более высокую разрядность, одной лишь заменой процессора не обойтись. Прочитайте в мануале к установленной в вашем системном блоке материнской плате, совместима ли она с 64-битными процессорами, и если да, то с какими именно. Это вопрос сокетов.
- Имейте в виду: если ваш процессор совместим с 64-битной версией, в принципе возможно изменение разрядности. НО: с 64-битной операционной системой вам придется неизбежно переустановить все драйверы всех своих аппаратных компонентов. Если вы не найдете 64-битные драйверы для вашего картридера, устройство может перестать работать после внесения изменений.
Как изменить разрядность на более высокую
Чтобы переключиться с 32-битной версии на 64-битную версию Windows, вам нужно сделать некоторые приготовления и выполнить следующие действия:
- Во-первых, найдите драйверы для всего вашего оборудования, подходящие для 64-битных систем. Сохраните их на USB-накопителе или на другом носителе данных.
- Проверьте или получите заново свой текущий ключ Windows. Вы можете найти его на установочном DVD-диске. Как создать загрузочный диск с полезными программами и драйверами или установочный диск Windows, вы можете узнать из отдельной статьи.
- Внимание: вы не можете установить 64-битную систему поверх старой 32-й версии, не удаляя старую систему. Обязательно создайте резервные копии всех важных данных из раздела жесткого диска, на который вы будете устанавливать свою 64-битную систему.
- Мы расскажем вам больше о том, что нужно учитывать при переустановке операционной системы.
- Установите 64-разрядную операционную систему, например, используя наши статьи об установке Windows 7 и Windows 8.
- После установки операционной систему установите все драйверы. Теперь имеет смысл создать резервную копию Windows, чтобы при необходимости воспользоваться «чистой» версией для быстрой переустановки системы.
Как на новой 64-битной системе запустить программы в режиме совместимости, мы расскажем в следующей статье.
- Чистая установка Windows 10 с помощью загрузочного носителя
- Поиск и установка драйверов периферийных устройств в Windows 8
Фото: компании-производители, pexels.com
Источник: ichip.ru