Понадобилось мне использовать "своеобразный" контейнерный класс, коего нет в шаблонах stl. Возник вопрос выделения/освобождения памяти и чтоб не городить велосипед решил посмотреть как выделяется/освобождается память в стандартных контейнерах. И о боже! оказывается по умолчанию используется аллокатор std::allocator (наследуется от __glibcxx_base_allocator, что есть ничто иное как __gnu_cxx::new_allocator).
А теперь вопрос непосредственно о __gnu_cxx::new_allocator. Допустим есть такой код: std::vector<int> v; for (size_t i = 0; i < 5; i++) v.push_back (i);
Правильно я понимаю, что при i равном 0 вызывается allocate (sizeof (int)), а затем четыре раза: память выделяется через allocate (sizeof (int) * (i + 1)), информация копируется из старого аллокатора в новый (через метод std::__uninitialized_copy_a), а затем память старого аллокатора освобождается? Если это правда, то почему нельзя сделать связный список с кусками выделенной памяти? Понимаю, что для обращения к n-ому элементу вектора легче обратиться через <указатель на первый элемент вектора> + n, но ведь и в std::list используется __gnu_cxx::new_allocator?!
ps и если можно сбросьте линки на информацию на русском об аллокаторах в пространстве std.