Как правильно определить потребляемую память?
Давайте определим точную границу, где проходит увеличение объёма потребляемой памяти. Это 33554432 элементов.
3355443210 = 200000016
Поищем предыдущий скачок. Он происходит на 16777216 элементах.
1677721610 = 100000016
Проверим дальше. Получим следующие значения:
838860810 = 80000016
419430410 = 40000016
209715210 = 20000016
104857610 = 10000016
...
810 = 816
Вывод - PHP резервирует память округляя количество элементов вверх до ближайшей степени двойки.
Массивы хранятся в 2^x. Когда размер массива переваливает за выделенное количество памяти, то php автоматически выделяет под размер массива в 2 раза больше памяти. Что у вас и происходит.

Если стоит задача поиграть с range, то лучше написать свой аналог на генераторах.
function xrange(int $min, int $max): iterable {
    for ($i = $min; $i < $max; $i++) {
        yield $i;
    }
}

$startMemory = memory_get_usage();

$array = xrange(1, 34000000);
foreach ($array as $item) {}

print_r($endMemory = memory_get_usage() - $startMemory); // 568
print_r(round($endMemory / 1024 / 1024) . ' MB'); // 0 MB