Какой распределитель по умолчанию GCC использует для STL? - PullRequest
4 голосов
/ 10 июня 2011

Согласно этой ссылке, gcc предоставляет много интересных распределителей памяти, которые будут использоваться с контейнерами STL, но который используется по умолчанию, если я не указываю один при создании std :: list?

Ответы [ 2 ]

6 голосов
/ 10 июня 2011

Как сказано на той странице, на которую вы ссылаетесь,

Текущий выбор по умолчанию для распределителя: __gnu_cxx :: new_allocator.

То есть, по умолчанию распределительпросто operator new.

3 голосов
/ 10 июня 2011

Согласно вики: "Распределитель по умолчанию использует оператор new для выделения памяти. [13] Это часто реализуется как тонкий слой вокруг функций выделения кучи C, [14] которые обычно оптимизированы для нечастого большие блоки памяти "

из "ISO / IEC (2003). ISO / IEC 14882: 2003 (E): Языки программирования - C ++" (ссылка на вики)

Распределитель по умолчанию:

namespace std {   
  template <class T> class allocator;  
  // specialize for void: template <> class allocator<void>   
  {  
   public:  
   typedef void*    pointer;   
   typedef const void* const_pointer;
   // reference-to-void members are impossible. typedef void value_type;  
   template <class U> struct rebind  {  typedef allocator<U> other;  };  
};


template <class T> class allocator  
{  
public:  
  typedef size_t size_type;  
  typedef ptrdiff_t difference_type;  
  typedef T* pointer;  
  typedef const T* const_pointer;  
  typedef T& reference;  
  typedef const T& const_reference;  
  typedef T template value_type;  
  template <class U> struct rebind { typedef allocator<U> other;   
}; 

  allocator() throw();  
  allocator(const allocator&) throw();  
  template <class U> allocator(const allocator<U>&) throw();  
  ̃allocator() throw();
   pointer address(reference x) const;      
  const_pointer address(const_reference x) const;`    

  pointer allocate(  
     size_type, allocator<void>::const_pointer hint = 0);  
     void deallocate(pointer p, size_type n);  
     size_type max_size() const throw();  
     void construct(pointer p, const T& val);  
     void destroy(pointer p);  
     };  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...