Я думаю, что вы можете сначала использовать два указателя, чтобы указать на первый ненулевой байт в обоих (слева). Если теперь две эффективных длины отличаются, выведите более длинную. Я имею в виду, давайте предположим, что first
- это 10 байтов, а second
- это 12 байтов. Байт 4 (first[3]
) - первый ненулевой байт в first
, а байт 2 (second[1]
) - первый ненулевой байт в second
. Теперь эффективная длина из first
равна 7 байтов, а second
равна 11. Очевидно, second
больше.
Теперь для равных эффективных длин . Сравните байты. Если равны, переходите к следующему. Иначе, больший байт существует в большем числе, и мы заканчиваем.
Вы можете ускорить эту операцию, сравнивая порции размером с регистр (я имею в виду порции, которые заполняют весь регистр), потому что, если оба порции равны, вы пропустите количество сравнений, равных размеру регистра в байтах. ... если они неравны, вы можете сравнить побайтово, или вы можете даже сначала сравнить половинный размер с половинным ... если равен, пропустите другую половину. Если отличается, то сравнивайте размер четверти с размером четверти и т. Д., Прежде чем сравнивать побайтно (это аналог бинарного поиска).