Конечно, это полностью зависит от реализации malloc, но в этом случае, при отсутствии вызовов free, большинство реализаций malloc, вероятно, даст вам ту же алгоритмическую скорость.
Как прокомментировал другой ответ, обычно это список свободных блоков, но если вы не позвонили свободным, он будет только один, поэтому в обоих случаях это будет O (1).
Это предполагает, что память, выделенная для кучи, достаточно велика в обоих случаях. В случае # 1 вам будет выделено больше общего объема памяти, так как каждое выделение включает в себя накладные расходы памяти для хранения метаданных, в результате вам может потребоваться вызов sbrk () или эквивалентного ему для увеличения кучи в случае # 1, что добавить дополнительные накладные расходы.
Они, вероятно, будут отличаться из-за кэша и других эффектов второго порядка, поскольку выравнивания памяти для нового распределения не будут такими же.
Если вы освобождали некоторые блоки памяти, то, скорее всего, # 2 будет быстрее из-за меньшей фрагментации и, следовательно, меньшего списка свободных блоков для поиска.
Если вы освободили все блоки памяти, все должно закончиться точно так же, так как любая нормальная свободная реализация объединит блоки обратно в одну область памяти.