Ответ 1
Это зависит от точного процессора и работы. Например, на 64-битных процессорах Pentium IV умножение 64-разрядных регистров было довольно медленным. Core 2 и более поздние процессоры были разработаны для 64-разрядной работы с нуля.
Как правило, даже код, написанный для 64-битной платформы, использует 32-битные переменные, в которые будут вписываться значения. Это не связано прежде всего с тем, что арифметика выполняется быстрее (на современных процессорах, как правило, нет), а потому, что она использует меньше памяти и пропускную способность памяти.
Структура, содержащая десятки целых чисел, будет вдвое меньше, если эти целые числа будут 32-битными, чем если бы они были 64-битными. Это означает, что для хранения будет занимать половину количества байтов, вдвое меньше места в кеше и т.д.
Используются 64-разрядные собственные регистры и арифметика, где значения могут не соответствовать 32-битным. Но основные преимущества для производительности исходят из дополнительных регистров общего назначения, доступных в наборе инструкций x86_64. И, конечно же, есть все преимущества, которые приходят из 64-битных указателей.
Итак, реальный ответ заключается в том, что это не имеет значения. Даже если вы используете режим x86_64, вы можете (и вообще делать) использовать 32-битную арифметику там, где это будет сделано, и вы получите преимущества более крупных указателей и более общих регистров. Когда вы используете 64-битные собственные операции, это потому, что вам нужны 64-битные операции, и вы знаете, что они будут быстрее, чем притворяться с помощью нескольких 32-битных операций - ваш единственный выбор. Поэтому относительная производительность 32-разрядных или 64-разрядных регистров никогда не должна быть решающим фактором в любом решении по реализации.