• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-04-25)  STL |   抢沙发  17 
    文章评分 0 次,平均分 0.0

    1.标准空间配置器std::allocator,这个配置器符合标准,但是性能相对来说差一点,不推荐使用。
    2.特殊的空间配置器std::alloc,这个也是默认的配置器。

    先来看看标准空间配置器std::allocator

    template <class T>
    inline T* allocate(ptrdiff_t size, T*) {
        set_new_handler(0);
        T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
        if (tmp == 0) {
    	cerr << "out of memory" << endl; 
    	exit(1);
        }
        return tmp;
    }
    
    template <class T>
    inline void deallocate(T* buffer) {
        ::operator delete(buffer);
    }
    
    template <class T>
    class allocator {
    public:
        typedef T value_type;
        typedef T* pointer;
        typedef const T* const_pointer;
        typedef T& reference;
        typedef const T& const_reference;
        typedef size_t size_type;
        typedef ptrdiff_t difference_type;
        pointer allocate(size_type n) { 
    	return ::allocate((difference_type)n, (pointer)0);
        }
        void deallocate(pointer p) { ::deallocate(p); }
        pointer address(reference x) { return (pointer)&x; }
        const_pointer const_address(const_reference x) { 
    	return (const_pointer)&x; 
        }
        size_type init_page_size() { 
    	return max(size_type(1), size_type(4096/sizeof(T))); 
        }
        size_type max_size() const { 
    	return max(size_type(1), size_type(UINT_MAX/sizeof(T))); 
        }
    };
    
    class allocator<void> {
    public:
        typedef void* pointer;
    };
    

    可以看出,这个配置器,只是对new和delete的简单封装。其中的每个函数,每个类型都是标准所需要的。
    再来下一节看看特殊的空间配置器std::alloc。

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/851.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享