LINUX.ORG.RU

История изменений

Исправление jpegqs, (текущая версия) :

Придумайте реальную задачку, где long long будет работать, а просто long не хватит.

Про размер файла вам сказали. 64-бит нужен чтобы получить верхнюю часть умножения, которое в x86 делается одной инструкцией что умножает два 32-бит числа и выдаёт 64-бит результат в edx:eax.

Очень портабельно, особенно для 32-битных систем. Компилятор будет вшивать библиотеку длинной арифметики для эмуляции long long.

Если знать что делаешь, то не будет. Библиотечные вызовы будут использоваться лишь при делениях. При умножениях тупые компиляторы иногда вставляют, когда одной инструкции mul достаточно. Для сложения и вычитания всё делается на месте.

Между прочим все нормальные архитектуры вроде x86 и ARM изначально разработаны так чтобы упростить операции над числами длиннее регистров. За исключением ошибки природы под названием MIPS и новой ошибки под названием RISC-V. Там даже сложение и вычитание длинных чисел делается через одно место, через 4 команды, когда нормальным архитектурам с флагами достаточно двух.

P.S. Есть функция POSIX fseako, но она работает со смещением, а не с 64-битными переменными.

Что такое смещение и как с ним работают?

-D_FILE_OFFSET_BITS=64 и fseeko/ftello будут работать с 64-бит офсетами.

Исходная версия jpegqs, :

Придумайте реальную задачку, где long long будет работать, а просто long не хватит.

Про размер файла вам сказали. 64-бит нужен чтобы получить верхнюю часть умножения, которое в x86 делается одной инструкцией что умножает два 32-бит числа и выдаёт 64-бит результат в edx:eax.

Очень портабельно, особенно для 32-битных систем. Компилятор будет вшивать библиотеку длинной арифметики для эмуляции long long.

Если знать что делаешь, то не будет. Библиотечные вызовы будут использоваться лишь при делениях. При умножениях тупые компиляторы иногда вставляют, когда одной инструкции mul достаточно. Для сложения и вычитания всё делается на месте.

Между прочим все нормальные архитектуры вроде x86 и ARM изначально разработаны так чтобы упростить операции над числами длиннее регистров. За исключением ошибки природы под названием MIPS и новой ошибки под названием RISC-V. Там даже сложение и вычитание длинных чисел делается через одно место, через 4 команды, когда нормальным архитектурам с флагами достаточно двух.