Apache Arrow源码分析(三)——内存池与缓冲区

引言内存管理一直是所有系统的设计重点和难点所在,有效的内存管理可以提高系统资源利用率,提升整体系统性能。对于操作系统而言,内存管理在内核中表现为段页式管理,对上层应用仅仅提供mmap, sbrk等相对简单的系统调用,操作系统更多的是关注底层物理内存到虚拟内存之间的映射关系以及内存到cpu cache之间的映射关系。然而,对于上层应用程序而言,仅仅只有mmap和sbrk是远远不够的,毕竟每次调用mma
摘要由CSDN通过智能技术生成

@原创文章,转载请注明: 转载自 镜中影的技术博客
本文链接地址: Apache Arrow源码分析(二)——类型的封装
URL:http://blog.csdn.net/linkpark1904/article/details/51151605

引言

内存管理一直是所有系统的设计重点和难点所在,有效的内存管理可以提高系统资源利用率,提升整体系统性能。对于操作系统而言,内存管理在内核中表现为段页式管理,对上层应用仅仅提供mmap, sbrk等相对简单的系统调用,操作系统更多的是关注底层物理内存到虚拟内存之间的映射关系以及内存到cpu cache之间的映射关系。然而,对于上层应用程序而言,仅仅只有mmap和sbrk是远远不够的,毕竟每次调用mmap需要由用户态切换到内核态,其开销还是很大的。于是,在操作系统接口之上,便出现了通用内存池,像glibc库提供的ptmalloc,提供malloc和free接口来分配和释放内存,但实际上,应用程序调用free接口,不见得这块内存就归还给操作系统了,准确的说,free掉的内存是归还给ptmalloc内存池,什么时候归还给操作系统由ptmalloc内存池来决定。

通用内存池同样存在问题,这种通用的策略并不能满足上层应用日益增长的需求。某些特定场景下,采用通用内存池可能会出现内存碎片,或者会出现内存分配和回收效率低下等问题。例如,在多线程环境下,ptmalloc的分配回收效率低下,于是google提出了tcmalloc,另外BSD的jemalloc 效率也很不错。

所以对专用系统而言,在内存管理这一块儿想要提升效率,就需要自己对内存管理这一块儿进行封装与实现,Arrow对内存池有简单的封装,但是具体管理内存分配和释放的策略还是采用系统malloc和free,然而这种封装思想值得学习,在以后需要做到自定内存管理时,可以很快的进行扩展。

内存池的定义

在Arrow中,内存池对外提供的接口很简单,就是分配和释放接口,所以对于接口MemoryPool的定义如下段代码所示:

class MemoryPool {
 public:
  virtual ~MemoryPool();

  virtual<
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值