STL defalloc.h
defalloc.h
. // Filename: defalloc.h
.
. // Comment By: 凝霜
. // E-mail: mdl2009@vip.qq.com
. // Blog: http://blog.csdn.net/mdl13412
.
. /*
8. *
9. * Copyright (c) 1994
10. * Hewlett-Packard Company
11. *
12. * Permission to use, copy, modify, distribute and sell this software
13. * and its documentation for any purpose is hereby granted without fee,
14. * provided that the above copyright notice appear in all copies and
15. * that both that copyright notice and this permission notice appear
16. * in supporting documentation. Hewlett-Packard Company makes no
17. * representations about the suitability of this software for any
18. * purpose. It is provided "as is" without express or implied warranty.
19. *
20. */
.
. // 这个文件提供原始的HP默认allocator, 仅仅是为了向后兼容
. //
. // 不要使用这个文件,除非你使用一个需要HP-style allocator的旧容器
. // SGI STL使用一个不同的allocator接口
. // SGI-style的allocator不针对对象类型进行参数化, 他使用void *指针
.
. #ifndef DEFALLOC_H
. #define DEFALLOC_H
.
. #include <new.h>
. #include <stddef.h>
. #include <stdlib.h>
. #include <limits.h>
. #include <iostream.h>
. #include <algobase.h>
.
. // 如果内存分配失败, 则直接退出程序
. template <class T>
. inline T* allocate(ptrdiff_t size, T*)
. {
. set_new_handler();
. T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
. if (tmp == ) {
. cerr << "out of memory" << endl;
. exit();
. }
. return tmp;
. }
.
. template <class T>
. inline void deallocate(T* buffer)
. {
. ::operator delete(buffer);
. }
.
. // 标准的STL allocator接口
. template <class T>
. class allocator
. {
. public:
. // STL type_traits需要的标准定义
. 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));
. }
. 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(), size_type(/sizeof(T)));
. }
. size_type max_size() const
. {
. return max(size_type(), size_type(UINT_MAX/sizeof(T)));
. }
. };
.
. // 仅使用void *类型的指针
. class allocator<void>
. {
. public:
. typedef void* pointer;
. };
.
. #endif
STL defalloc.h的更多相关文章
- STL stl_config.h
stl_config.h . // Filename: stl_config.h . . // Comment By: 凝霜 . // E-mail: mdl2009@vip.qq.com . // ...
- STL stl_alloc.h
# // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: http://blog.csdn.net/mdl13412 # # // ...
- STL stl_uninitialized.h
stl_uninitialized.h // Filename: stl_uninitialized.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com ...
- STL stl_construct.h
stl_construct.h // Filename: stl_construct.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog ...
- STL六大组件之——分配器(内存分配,好深奥的东西)
SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器:当配置区小于1 ...
- 【转】STL空间配置器
STL空间配置器(allocator)在所有容器内部默默工作,负责空间的配置和回收.STL标准为空间配置器定义了标准接口(可见<STL源码剖析>P43).而具体实现细节则由各编译器实现版本 ...
- STL内存管理
1. 概述 STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物. STL标准如下介绍Allocator the STL includes s ...
- 侯捷STL课程及源码剖析学习2: allocator
以STL 的运用角度而言,空间配置器是最不需要介绍的东西,它总是隐藏在一切组件(更具体地说是指容器,container)的背后,默默工作默默付出. 一.分配器测试 测试代码 #include < ...
- SGI STL内存配置器存在内存泄漏吗?
阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...
随机推荐
- SVN分支与主干
我的理解:在svn版本库中创建两个目录,一个主干如truck,一个分支目录如branch(注:分支可以创建多个),分别在客户端中检出代码,在分支中进行bug的修复以及新模块的开发,开发完后再merge ...
- 【BZOJ4154】[Ipsc2015]Generating Synergy KDtree
[BZOJ4154][Ipsc2015]Generating Synergy Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问 ...
- [转]React表单无法输入原因----约束性和非约束性组件
转自:http://blog.csdn.net/lihongxun945/article/details/46730835 表单是前端非常重要的一块内容,并且往往包含了错误校验等逻辑. React对表 ...
- POJ 1845-Sumdiv【经典数学题目---求因子和】
转载请注明出处:http://blog.csdn.net/lyy289065406/article/details/6648539 優YoU http://user.qzone.qq.com/289 ...
- Android UI Design
Ref:直接拿来用!10款实用Android UI工具 Ref:Android UI设计资源 Ref:Android酷炫实用的开源框架(UI框架) Ref:Android UI 组件 Ref:Andr ...
- full_case parallel_case学习心得
一般情况下,DC把case语句综合成选择器电路,但也可能把case语句综合成优先权译码电路.有时,优先权译码电路是不必要的,这是可以使用“// synopsys parallel_case”引导语句强 ...
- 一对多 添加表单 cocoon
gem 'cocoon' - javascript "cocoon.js" https://note.youdao.com/web/#/file/XCiivnE/note/WEB4 ...
- 高性能javascript学习总结(1)--加载与运行
一.脚本的位置 我们知道,一个<script>标签可以放在 HTML 文档的<head>或<body>标签中,但是浏览器是怎么加载和执行这些java ...
- Yii2之事件处理
通过事件(Event)处理,可以在某个特定时刻执行指定的代码,可以解耦代码,同时也增加了可维护性,通常,事件在客户端软件中比较好理解,比如onClick,onFocus,当点击按钮,获取到焦点时执行指 ...
- 每天一个Linux命令(6)rmdir命令
rmdir命令用来删除空目录. 利用rmdir命令可以从一个目录中删除一个或多个空的子目录.该命令从一个目录中删除一个或多个子目录,其中dirname表示目录名.如果dirname中没有指定 ...