включил оптимизацию, время добавления элементов сравнялось, потребление памяти упало на обоих до 176 МБ
Размер не соответствует расчётному из-за того что аллокации через new происходит не плотно. Между разными нодами есть память, которая выделена процессу, но не занята полезными данными.
Можно подсчитать размер потерянной в пустую памяти кодом (для x86):
std::vector<uint32_t> ptrs;
ptrs.reserve(list.size);
for (auto node = list.head; node != nullptr; node = node->nextNode) {
ptrs.push_back((uint32_t)node);
}
std::sort(ptrs.begin(), ptrs.end());
uint32_t wastedSpace = 0;
for (uint32_t i = 1; i < ptrs.size(); i++) {
wastedSpace += ptrs[i] - ptrs[i - 1] - sizeof(D1List<int>::Node);
}
В Debug, forward_list работает медленнее потому что внутри у него много вызовов функций. В Release они оптимизируются и инлайнятся.
Скорее всего, памяти в Debug используется больше для анализа утечек памяти.