Вообще простейший список - да, куча аллоков.
Однако STL вроде бы выделяет блок памяти и размечает в нем список, потом с ним работает. Если становится мало - выделяет еще один и размечает его. По крайней мере так было когда я не заметил, как ревершу список в одной проге.
Простейший же список я делал на фасме через постоянный маллок. Структурка вида
Код:
struc List
{
.Next dd 0
.Data dd 0
.size = $ - .Next
}
сильно упрощает дело.