![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 80
镜中影
愿幻化成风
展开
-
C++单例模式思考
C++单例模式思考1. 简单实现单例顾名思义,就是全局唯一,有且只有一个对象,不允许同时存在多个对象,所以通常单例在C++里面有固有的实现格式——将构造函数声明成private或者protected,目的是不让外部使用者通过构造函数来创建对象。对外暴露一个静态函数获取单例对象,对内维护全局唯一的静态对象实例。具体实现如下所示:class Singleton {protected: Sing原创 2015-09-01 11:36:17 · 700 阅读 · 2 评论 -
Apache Arrow源码分析(三)——内存池与缓冲区
引言内存管理一直是所有系统的设计重点和难点所在,有效的内存管理可以提高系统资源利用率,提升整体系统性能。对于操作系统而言,内存管理在内核中表现为段页式管理,对上层应用仅仅提供mmap, sbrk等相对简单的系统调用,操作系统更多的是关注底层物理内存到虚拟内存之间的映射关系以及内存到cpu cache之间的映射关系。然而,对于上层应用程序而言,仅仅只有mmap和sbrk是远远不够的,毕竟每次调用mma原创 2016-04-14 16:16:32 · 3214 阅读 · 0 评论 -
Apache Arrow源码分析(一)——简介和框架
背景列存储在数据库领域中早已被提出,列存储数据结构在分析型事务上表现优异,大数据分析引擎,诸如Spark-SQL,Impala 均采用列存储作为其中间数据表示形式,那么Apache Arrow就是这样一种内存列式数据结构。在众多分布式系统中,每个系统都有自己内部的内存格式,70-80%的CPU浪费在序列化和反序列化过程,类似功能在多个项目中实现,没有一个标准。那么Arrow就是为解决这一问题而提出了原创 2016-03-25 15:24:23 · 7997 阅读 · 0 评论 -
Apache Arrow源码分析(二)——类型的封装
@原创文章,转载请注明: 转载自 镜中影的技术博客 本文链接地址: Apache Arrow源码分析(二)——类型的封装 URL:http://blog.csdn.net/linkpark1904/article/details/51000719引言对于向量容器而言,需要适配底层多种数据类型。C++在语言层面提供了诸如int,double,float,char等基础类型,但是对于程序库而言,需要原创 2016-03-28 20:53:48 · 2993 阅读 · 0 评论 -
一个C++线程池的实现
线程池这玩意儿通常用在服务器端,服务器为了减少线程创建和析构的代价,所以弄出了线程池这个玩意儿,早先的服务器采用多进程多线程架构,来了一个客户端连接就创建一个执行体(线程或者进程)来应对客户端的请求,客户端离开后就将这个执行体析构,这样当然很不科学,创建线程析构线程也是有开销的,这样客户平凡断线掉线再上线,服务器当然受不了,于是,就有了线程池模型。所谓线程池模型就是在服务器接受外部请求之前先把线程创原创 2016-03-03 19:15:41 · 2239 阅读 · 1 评论 -
traits编程技法感悟
由于工作学习需要,在研究生阶段主要编程语言还是以C++为主,多少在学习语言的过程中,道听途说c++很高大上,c++是一门四不像的语言,c++学起来很难,用c++做工程的不多等等这之类的话。于一门语言来说,c++确实算的上历史悠久,众人对其评价也是褒贬不一。无论如何,在我看来,一门语言能存活至今,肯定有其存在的价值和意义,也有许多值得我们学习的地方。近来有幸拜读《STL源码剖析》,膜拜一下设计标准C+原创 2016-03-03 19:10:45 · 729 阅读 · 0 评论 -
OceanBase SQL解析源码分析(三)
基本上每一个SQL解析到最终物理任务执行经历的流程大同小异,从入口点开始,首先通过Flex和Bison生成的语法解析工具,对SQL进行语法解析,生成语法树。在生成的语法树的基础上,生成内部描述的逻辑计划,通过逻辑计划进行查询优化,生成具体的物理执行计划。原创 2016-03-02 14:28:38 · 1638 阅读 · 0 评论 -
线程本地存储(TLS)的学习
一、引言最近在看jemalloc的文章 A Scalable Concurrent malloc(3) Implementation for FreeBSD, 文中有提到,在分配Arena的时候用到了线程本地存储技术(thread-local storage),这里发散一下,复习一下什么是线程本地存储。二、简介Thread-local storage,也就是在多线程程序中,为每个线程提供该线程独占的原创 2016-03-15 22:40:21 · 1458 阅读 · 0 评论 -
STL——string分析
STL——string分析之前一直在实验室写数据库相关的开发,由于是开发一款内存数据库,所以对内存资源的适用显得尤为重要。在开发的时候由于想快速搭建原型,所以大量利用的STL,特别是string,但是在使用的时候发现string的额外内存开销比较大,于是这里简单对string进行测试,测试很简单,在等量的原始数据下将vector一. 测试工具之前一直在用valgrind做内存泄漏的检测,但是并没有注原创 2015-09-01 11:33:50 · 714 阅读 · 2 评论 -
关于C++回调函数设计的思考
之前在接触到高性能异步事件驱动编程时,里面涉及到大量的回调,对于回调函数的实现在C语言中很统一,通过函数指针的方式来进行。将自己实现的回调函数地址赋值给回调函数指针。但是在C++中回调的方式可以多种多样。实际上,回调函数类似于设计模式中的策略模式,统一的接口但是有不同的实现。1.多态方式实现回调函数通过提出一个公共接口类,具体业务由子类执行,在回调绑定的时候只需要把子类对象的指针赋值给基类指针,通过原创 2015-09-01 11:40:15 · 1023 阅读 · 0 评论 -
RedBase SQL解析源码分析
RedBase是斯坦福的数据库系统实现这门课程(cs346)的一个项目,实现了一个简易的数据库系统,包括底层存储层(Paged File Component),记录管理层(Record Management Component),索引管理层(Indexing Component),系统管理层(System Management Component),SQL解析层(Query Langu原创 2016-03-03 12:00:49 · 4588 阅读 · 2 评论