Item 36. Class-Specific Memory Management
Item 36. Class-Specific Memory Management
在类中声明operator new 和 operator delete 成员就可以实现类自己的内存分配与管理。
class Handle {
public:
//...
void *operator new( size_t );
void operator delete( void * );
//...
};
//...
Handle *h = new Handle; // uses Handle::operator new
//...
delete h; // uses Handle::operator delete
这样对于Handle的子类需要重载operator new 和 operator delete
class MyHandle : public Handle {
//...
void *operator new( size_t );
void operator delete( void *, size_t ); // note 2nd arg
//...
};
//...
Handle *h = new MyHandle; // uses MyHandle::operator new
//...
delete h; // uses MyHandle::operator delete
------------------------------------------------------
一个误解的概念:使用new和delete意味着使用heap内存
对于全局的那个operator new 和 operator delete,事实确实如此。既然operator new 和 operator
delete 都可以自定义,因此operator new 分配的内存就可以来自heap,静态分配的内存块,标准的容
器等。如下例所示:
struct rep {
enum { max = 1000 };
static rep *free; // head of freelist
static int num_used; // number of slots used
union {
char store[sizeof(Handle)];
rep *next;
};
};
static rep mem[ rep::max ]; // block of static storage
void *Handle::operator new( size_t ) {
if( rep::free ) { // if something on freelist
rep *tmp = rep::free; // take from freelist
rep::free = rep::free->next;
return tmp;
}
else if( rep::num_used < rep::max ) // if slots left
return &mem[ rep::num_used++ ]; // return unused slot
else // otherwise, we're...
throw std::bad_alloc(); // ...out of memory!
}
void Handle::operator delete( void *p ) { // add to freelist
static_cast<rep *>(p)->next = rep::free;
rep::free = static_cast<rep *>(p);
}
转载于:https://www.cnblogs.com/wuwuwu/archive/2005/04/17/6335331.html
Item 36. Class-Specific Memory Management相关推荐
- Memory Management in AIR / AS3 / Flash Garbage Collection.
Memory management and garbage collection in Flash Player is a well debated topic. Some think that th ...
- Java (JVM) Memory Model – Memory Management in Java
原文地址:http://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java Understanding JV ...
- 异构内存管理 Heterogeneous Memory Management (HMM)
https://www.kernel.org/doc/html/latest/vm/hmm.html 目录 异构内存管理 (HMM) 使用特定于设备的内存分配器的问题 I/O 总线.设备内存特性 共享 ...
- 内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB
目录 Linux Memory Management Memory Address Need for Virtual Addressing Address Translation Address Tr ...
- Memory Management Concepts overview(内存管理基本概念)
目录 Concepts overview Virtual Memory Primer Huge Pages Zones Nodes Page cache Anonymous Memory Reclai ...
- 《MIT JOS Lab2: Memory Management》实验报告
目录 0 准备文件 1 物理页管理 1.1 boot_alloc( )函数 1.2 mem_init ( )函数 1.2.1 函数中用到的 PageInfo 结构 1.2.2 初始化分配首页 1. ...
- 2022-3-16 MIT 6.828 Lab 2: Memory Management | Part 3: Kernel Address Space | Exercise 5
Exercise 5. Fill in the missing code in mem_init() after the call to check_page(). Your code should ...
- [翻译] - Inside SQL Server 2000's Memory Management Facilities
原文地址:Inside SQL Server 2000's Memory Management Facilities 翻译:RicCC Ken Henderson Microsoft ...
- Operating System Concepts--chap9 Memory Management;
为什么80%的码农都做不了架构师?>>> 这一章节的memory management内容覆盖从bare-machine approach到paging和segmentatio ...
最新文章
- MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
- NYOJ 56 阶乘因式分解(一)
- ajax给data赋值,vue 2.0 methods 里ajax生成的数据,怎么赋值给data
- CFileDialog
- php 判断美国zip code
- 粗谈MySQL事务的特性和隔离级别
- js——window.open用法
- js错误: XXX变量 is not a function
- KVC在定义Model类中的妙用
- 可怕!让无数女明星下海的换脸术来了,Facebook推出视频换脸功能!
- stagefright_StageFright:Android操作系统中最易受攻击的错误
- 易优cms eyoucms登陆后台提示验证码错误
- java号码归属地接口,免费API-手机号码归属地接口
- DirectX 3D图形
- 架构漫谈:什么是架构? - 转
- HDU 6164 Dying Light(计算几何)
- 保存图片到相册并打开微信扫一扫
- 【win10系统重装】
- 【Sofice小司笔记】2 算法与数据结构,各类基础及常用高级数据结构、各种搜索方法、动态规划、字符串、数论、编码学、排序等,大部分都基于java实现
- 数据时代做好知识主人-自创文章
热门文章
- 网页快照是什么?对SEO优化有什么作用?
- java 找不到工程文件_类加载器找不到文件求帮助
- 考c语言三级需要什么软件,全国计算机三级网络技术上机考C语言的软件是什么哈?...
- php适配器模式应用,什么是适配器模式,它有哪些应用场景
- 简单的PHP和MYSQL做投票系统_php mysql简单投票系统
- python查询mysql 乱码_python查询mysql中文乱码问题
- 赛码浪潮笔试题库软件实施岗位_2020年浪潮软件类笔试题
- 格式化时间中HH:mm:ss与hh:mm:ss的区别
- quot;正统quot;函数式编程 两个规则
- Recovering unassigned shards on elasticsearch 2.x——副本shard可以设置replica为0在设置回来...