有点打击

今天本来是问内存池的问题

问着问着 就变成 原来我对 new和malloc的区别都没有整明白

new  是相当于 malloc加上构造函数

对话:

ly 15:16:11
内存池的那一块
比如WEB 上面基本就是主要是 new HttpEventHandler 这个 要对这个 做一个内存池

那可以这样设计吗?比如建一个list 保存 n个HttpEventHandler 一次性的new 这n个HttpEventHandler 然后来一个请求 就从队列中取一个 这种方式?

xx15:17:04
你想问什么呢?你是想问怎么做,还是想问你这种想法可不可以?
ly 15:20:00
这种方法可不可以
还有就是 我看ACE_Cached_Allocator 这个是ACE的内存池管理 但是我不知道它怎么和比如HttpEventHandler 这个类结合起来用 并没有看看有模板之类的可以用

xx15:20:59
你知道不知道内存池的作用是什么?
ly 15:21:41
知道啊 就是因为多次的new delete 这样就会有内存碎片 还有就是速度

xx 15:21:58
我问的是功能
xx15:22:05
不是产生的结果
ly 15:23:26
一次性的先分配好了 到时候 要用的时候 找预先分配好的一个模块
xx 15:24:26
没有内存池的时候,你只是用new直接创建了一个对象,但是new的过程分为两步,首先是分配内存,然后是调用构造函数。
内存池就只是负责内存的分配,有了内存池后,你再去创建对象时候,只需要先从内存池中取出内存,然后再在取出的内存上调用对象的构造函数,产生你需要的对象
ly 15:24:36
按照你说的 就是内存块的大小固定,比如一开始 先分配100个内存块的一个内存池 到时候 要用的时候 直接从这里面取没有使用的

xx 15:25:07
你先了解对象怎么new出来的吧
xx 15:26:20
class Object;//类声明
void* pvoid=malloc(sizeof(Object));
new(pvoid) Object();
这样的语句你没看过吧,要没有先学习一下再问
ly 15:49:11
第一句看过了的 你的意思是到时候分配比如

void* pvoid=malloc(sizeof(HttpEventHandler));
new(pvoid) Object(); 这个好像没有
new 怎么调用构造函数?
在取出的内存上调用对象的构造函数,产生你需要的对象 这句没有看懂

xx 15:49:58
我都把语句写出来了,你自己查下这句话怎么调用的构造函数吧

内存池的管理 只是负责内存的管理,有了内存池后,你再去创建对象时候,只需要先从内存池中取出内存,然后再在取出的内存上调用对象的构造函数,产生你需要的对象

原文地址:https://www.cnblogs.com/rosesmall/p/2473724.html