в основном все упирается в размер переменных, как уже сказали
для i386
sizeof(int)=4
sizeof(long)=4
sizeof(long long)=8
sizeof(void *)=4
sizeof(size_t)=4
для x86_64:
sizeof(int)=4
sizeof(long)=8
sizeof(long long)=8
sizeof(void *)=8
sizeof(size_t)=8
следовательно указатели и size_t, больше не помещаются в тип int. тип long так же имеет тот же размер, что и long long.
есть и менее очевидные вещи. в i386 обычно используется выравнивание на 4 байта, потому, что выравнивание на больший размер часто не имеет смысла. поэтому тип double выравнивается на 4 байта, хоть и имеет размер 8. в x86_64 он уже выравнивается на 8 байт
struct test {
int a;
double b;
} t;
для i386
(void *)&t.b - (void *)&t.a) = 4
для x86_64
(void *)&t.b - (void *)&t.a) = 8
главным образом это затрагивает передачу данных между программами на разных архитектурах, посредством записи в файл и передачи по сети
чтобы избежать размолвок между архитектурами:
1) для передачи нужно использовать более конкретные типы, например uint32_t, int64_t из <cstdint>
2) записывать структуры в поток не целиком, а каждое поле по отдельности (или использовать упакованные структуры, но это не стандартизировано)
3) не использовать int для промежуточного хранения указателей или результатов функций, возвращающих size_t. и по возможности не передавать результаты таких функций без явного приведения типов в функции, которые требуют, например, int.
так же в x86_64 значительно изменился abi. это может затронуть ассемблерные вставки и особенно функции полностью написанные на ассемблере.
в частности, изменился набор регистров, которые необходимо сохранять внутри функции, а так же способ передачи и приема аргументов.
Другие языки программирования и технологии
Какие есть особенности при переходе с 32 на 64 битное программирование?
Есть, хотябы даже в адресации памяти и размере переменных)
Похожие вопросы
- Подскажите разницу между 32 и 64 битными компами, процессорами, программами? Объясните как сможете "на пальцах".
- Объясните в чём разница между 32 и 64 битной операционной системой? Купил свой комп за круглую сумму, а он 32-битный.
- Что такое 32 и 64 бита или в чем отличие 32 от 64-битной версии ОС? Что это за биты? и какая лучше для Windows7?
- операционные системы 32 бит 64 бит, разряды процессоров итд
- Почему 64 битные процессоры не поддерживают эмуляцию 16 битных програм?
- Help. А чем отличаются компьютеры 32битные и 64 битные, ?
- когда я переведу систему с 32 на 64 то что было на 32 сохранится я имею в веду файлы документы сохранятся
- В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. дано натуральное число N. Как на
- кто шарит в компах помогите. в чем разница между системай 32 и 64??? не могу понять
- Народ, в чем разница между 32, 64 и 86 битной виндой. И какая лучше????(win XP)