Просто для того, чтобы быть ясным: я знаю, что malloc
и free
реализованы в библиотеке C, которая обычно выделяет куски памяти из ОС и делает свое собственное управление для высылки меньшего количества памяти в приложение и отслеживает количество выделенных байтов. Этот вопрос не Как бесплатно узнать, сколько бесплатно.
Скорее, я хочу знать, почему free
был сделан таким образом, в первую очередь. Будучи языком низкого уровня, я думаю, было бы вполне разумно попросить программиста C отслеживать не только то, что было выделено для памяти, но и сколько (на самом деле, я обычно обнаруживаю, что в конечном итоге отслеживаю количество байтов malloced в любом случае). Мне также приходит в голову, что явное указание количества байтов на free
может позволить некоторым оптимизациям производительности, например. распределитель, который имеет отдельные пулы для разных размеров распределения, сможет определить, какой пул освободится, просто взглянув на входные аргументы, и в целом будет меньше затрат на пространство.
Итак, короче говоря, почему были созданы malloc
и free
так, что они должны внутренне отслеживать количество выделенных байтов? Это просто историческая катастрофа?
Небольшое редактирование: Несколько человек предоставили такие пункты, как "что, если вы освободите другую сумму, чем то, что вы выделили". Мой воображаемый API может просто потребовать, чтобы один точно освобождал количество выделенных байтов; освобождение более или менее может быть просто UB или реализация определена. Однако я не хочу препятствовать обсуждению других возможностей.