Использование 64-bit кода и 32-bit данных

157
15 ноября 2021, 10:20

Какие преимущества дает использование 64-bit кода и 32-bit данных?

Answer 1

Я предполагаю, что речь идет об архитектуре Intel 64 (x86_64) и под 32-битными данными подразумеваются double words и 32-битные регистры.

Использование 32-битных данных вместо 64-битных имеет смысл по нескольким причинам:

  1. Quad words (64 бита) занимают вдвое больше памяти, чем double words (32 бита) в кэше процессора. Использование последних позволяет использовать кэш более экономно, что может положительно сказаться на производительности.

  2. Инструкции, оперирующие над quad words и 64-битными регистрами обычно длинее чем те, что работают с double words и 32-битными регистрами. Поэтому там, где можно использовать последние, лучше использовать их1.

    Классический пример: для обнуления 64-битного регистра стоит использовать не

    xor R64, R64
    

    а 32-битную версию этого регистра:

    xor R32, R32
    

    потому что такая операция обнулит не только 32-битную часть EAX, например, но и его 64-битную часть. Результат одинаковый, размер инструкций разный. Что опять же положительно скажется на производительности: а) инструкция будет занимать меньше места в кэше; б) уменьшится размер бинарного файла.

  3. Если нам нужно поддерживать и 32-, и 64-битную версию программы, имеет смысл использовать 32-битные данные, чтобы уменьшить различие между версиями и сделать их сопровождение более простым.

1. Это не всегда возможно. Например, в 64-bit mode мы не можем положить на стек (push) 32-х битное значение.

READ ALSO
Как соединить два массива в С++

Как соединить два массива в С++

Вот такой кодПри выполнении ввожу: 5, (1,2,3,4,5), 5 (6,7,8,9,10), получаю -858993460 -858993460 -858993460 -858993460 -858993460 1 2 3 4 5

167
Решение СЛАУ с помощью библиотеки Eigen C++

Решение СЛАУ с помощью библиотеки Eigen C++

Я хочу воспользоваться методами библиотеки Eigen для решения СЛАУЯ взяла пример из файла документации и проект не компилируется

178
Electron и C++ / C# | Обмен данными напрямую

Electron и C++ / C# | Обмен данными напрямую

Вопрос заключается только в теории

181
Константный параметр в шаблоне по умолчанию

Константный параметр в шаблоне по умолчанию

Подскажите в чем ошибка при реализации следующей ситуации:

203