logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

copy-on-write 在c++ std::string中的应用

一 简介Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略.总的来说,COW通过浅拷贝(shallow copy)只复制引用而避免复制值;当的确需要进行写入操作时,首先进行值拷贝,再对拷贝后的值执行写入操作,这样...

c++ 性能优化策略

1 关于继承:不可否认良好的抽象设计可以让程序更清晰,代码更看起来更好,但是她也是有损失的,在继承体系中子类的创建会调用父类的构造函数,销毁时会调用父类的析构函数,这种消耗会随着继承的深度直线上升,所以不要过度的抽象和继承,更为严重的是当多重继承中并且有虚函数的存在时情况更为复杂,的确,这些问题涉及开销,但是,多重继承减少了编码的负担,同时也让问题的解决方案更加简洁,这当然要付出一些代价.总之,与

c++反射实现方案的选择

由于c++原生不支持反射,绝大多数情况也不需要反射,但是有些时候如果通过反射会避免大量的重复无用的代码。

c++中的函数指针和类成员函数指针

在c中函数指针的形式很简单 函数返回type+(*函数名)+参数,为了使用方便我们经常通过typedef来重新定义,下面来看一个例子。#includetypedef int (*DGUCO_FUNC) (int,int);//加int add(int a,int b){return a + b;}//减int reduce(int a,int b){

c++中的函数指针和类成员函数指针

在c中函数指针的形式很简单 函数返回type+(*函数名)+参数,为了使用方便我们经常通过typedef来重新定义,下面来看一个例子。#includetypedef int (*DGUCO_FUNC) (int,int);//加int add(int a,int b){return a + b;}//减int reduce(int a,int b){

linux spin_lock(自旋锁)semaphore(信号量)和mutex(互斥锁)的区别

1 spin_lock       自旋锁的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在Linux内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到在许多内核数据结构中都嵌入有spinlock,这些大部分就是用于保证它自身被操作的原子性,在操作这样的结构体时都经历这样的过程:上锁-操作-解锁。      如果内核控制路径发现自旋锁“...

单线程读单线程写一个变量是否一定要加锁

  单线程读单线程写一个变量是否需要加锁,刚毕业的时候我会有这样的想法:一个线程只读并没有改变变量的值并不会有两个线程同时写一个变量产生竞态,所以不用加锁,但是工作中长者给我指导都是多线程必须加锁,所以我也没有深究这个问题,从来没有想过为什么。  过了一段时间后,了解到原子性这个概念,了解到虽然一个线程读一个线程写,但是因为对一个线程的写和读并非是原子的,读线程可能读到另外一个线程写到一半的值..

golang channel的使用技巧

go的横空出世,让很多人眼前一亮,它的语法以简洁著称,并且它对多核并发的原生支持,让他在云计算和分布式领域展露头脚,它的核心围绕channel和goroutine展开。下面我们来介绍一下channel的基本用法。1 信号量的传递

virtualBox端口转发

由于目前redis对windows的支持并不是很完美,因此在windows下开发时,我就在虚拟机中装一个ubuntu,在里面搭建好redis的环境后,在windows下连接虚拟机中的redis,当然完全可以在ubuntu下开发,就不用这么麻烦了,不过这不是我一个人能决定的,mac就更好了,哈哈

到底了