zoukankan      html  css  js  c++  java
  • 有点打击

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

    问着问着 就变成 原来我对 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
    我都把语句写出来了,你自己查下这句话怎么调用的构造函数吧

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

  • 相关阅读:
    苹果向Intel迁移的过程
    苹果向Intel迁移的过程
    UNIX发展简史
    UNIX发展简史
    不折腾的Windows+MAC双平台ADT-Bundle版本总结
    不折腾的Windows+MAC双平台ADT-Bundle版本总结
    MDICT的100G的辞典资源
    MDICT的100G的辞典资源
    android开发工具中的版本不一致问题的剖析
    android开发工具中的版本不一致问题的剖析
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2473724.html
Copyright © 2011-2022 走看看