Процессоры были 64-битными в течение некоторого времени. Я недоумеваю, почему люди боятся переходить на 64-битную операционную систему. 32-битная ОС не может адресовать больше 3 Гб ОЗУ, так что это достаточная причина, чтобы сделать обновление в моей книге!
Когда вы кодируете, самая большая разница, с которой я столкнулся, — это размер указателя!
В 32-битной скомпилированной программе указатель обычно имеет размер 4 байта. В 64-битной скомпилированной программе указатель обычно имеет размер 8 байт.
Почему это важно?
Допустим, ваша программа использует сокеты для передачи структуры данных от одного процесса к другому. Возможно, серверный процесс 32-битный, а клиентский процесс 64-битный.
Хотя структура может быть определена одинаково как в 32-, так и в 64-разрядных программах, 64-разрядный исполняемый файл будет резервировать 8 байтов для каждого указателя (и структуры обычно содержат указатели на другие структуры, такие как связанные списки и т. д.).
Это может привести к смещению данных, когда 32-разрядный исполняемый файл передает структуру 64-разрядному исполняемому файлу.
В (почти?) всех случаях передача значений указателя между процессами в любом случае бессмысленна, например. их данные не имеют значения и могут быть опущены.
Таким образом, вы можете подумать, что передача значений указателя была бы необычной практикой, но самый простой способ передачи структуры — это запоминание ее содержимого через сокет, указатели и все такое!
Это самая существенная загвоздка, которую я обнаружил до сих пор при кодировании 64-битных клиентов, когда наше серверное программное обеспечение является 32-битным.
person
Community
schedule
16.09.2010