Різниця між amd64 та i386 полягає в тому, що amd64 є 64-розрядною, тоді як i386 - 32-розрядною . Це ширина (у бітах) регістрів, доступних в ядрі.
По суті, найбільша кількість 32-розрядних процесорних ядер може обробитись за один раз - це трохи більше 4,29 мільярда, тоді як 64-бітове ядро може працювати трохи більше 18,44 мільярда.
Сердечні ядра в сучасних комп'ютерах здатні вести себе як 64-бітний або 32-бітний процесор залежно від того, яку версію операційної системи ви встановили.
64-бітний код, як правило, працює швидше, ніж 32-розрядний код, або тому, що він може працювати з більшими числами в процесі руху, або тому, що 64-бітні ядра мають більше регістрів, тому вони можуть зберігати більше речей без необхідності поміщати речі у зовнішню пам'ять. Хоча немає гарантії, що 64-розрядний код запуститься швидше, якщо код не буде записаний, щоб скористатися додатковими можливостями процесора.
Компіляція в 32-бітній системі призведе до іншого коду, ніж 64-бітна система. Ви можете довести це, компілюючи код складання на двох системах. Припустимо, що ваш файл C - це myfile.c, спробуйте gcc -S myfile.c
обидві системи та порівняйте myfile.s
Добре написаний код для 32-бітної системи повинен компілюватись і працювати в 64-бітній системі, але не весь код добре написаний. Багато програмістів роблять припущення щодо системи, які можуть бути неправдивими: наприклад, ширина регістра або порядок байтів.
Без доступу до вихідного коду важко зрозуміти, в чому проблема, але segmenation fault
вказує на те, що була зроблена спроба отримати доступ до пам'яті, яка не належить програмі. Це, наприклад, може вказувати на те, що mem_ptr - це 32-бітний покажчик, який добре підходить для 32-бітної системи, але він повинен бути 64-бітовим покажчиком для 64-бітної системи.