Разница между 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-разрядной системе.