PHP компилирует код из всех ваших включенных / необходимых файлов для кода операции для более быстрого выполнения, эта память не может быть выделена, php освобождает ее после завершения скрипта.
Если вы выделите некоторую память / объект в вашем втором требуемом файле, он также займет память, но вы можете сбросить эти переменные (но это не ваш случай, так как вы просто объявляете класс в вашем b.php) .
Кроме того, php должен знать, что вы не хотите снова включать файл b.php (include_ONCE), поэтому он хранит внутреннюю запись файлов, которые вы включили, чтобы не пытаться включить их снова (это означает, что это также потребляет память).
Как сказал ахмет алп балкан, вы также можете попытаться сохранить использование памяти вашего скрипта как можно ниже, если вы освободите переменные, которые вам больше не нужны, через unset ();
Но по соображениям производительности PHP не выделяет эту память прямо в момент, когда вы вызываете unset, а скорее отмечает эту неустановленную переменную как «освобожденную».
Затем приходит сборщик мусора и освобождает все освобожденные переменные (+ те, которые, по его мнению, вам больше не нужны). GC срабатывает со временем.
Попробуйте, например, так:
<?
echo memory_get_usage();
include_once "b.php";
echo memory_get_usage();
$n = new obj();
echo memory_get_usage();
unset($n);
echo memory_get_usage();
// try to wait for GC
sleep(5);
echo memory_get_usage();
?>