C与c++
QXZ06
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
类的继承之痛
通过类的继承,构建了一个树形的逻辑依赖结构,也就是子类的功能是依赖父类的。但是随着时间的推移,我们发现,我们需要对父类进行改造,父类本身也会发生变化,原来的 class father逻辑上变成了class father和class father1,往往因为过渡时期或者历史原因,father和father1必须同时存在,我们发现,为了使用father1,我们得重新编写他的子类,尽管这两个父类的子类逻原创 2015-01-22 10:31:07 · 552 阅读 · 0 评论 -
面向对象与面向过程
写c++的,脑海中总是会浮现一个问题,面向对象与看相过程的差别是什么?为什么要发展出面向对象的机制?众所周知,c是面向过程的,所有的逻辑被分解为一个个模块,模块之间通过一定的流程进行拼接。其实在面向对象的的时候,程序也是这么运行的,我们的设计,也会将功能分解为小的模块,然后集成。在分与合的方法上,我们是没有变化的。其实,面向对象是一种高层次的抽象,这种抽象是人的大脑天生具有的功原创 2015-10-10 19:26:11 · 586 阅读 · 0 评论 -
stl源码学习
template参数推导,智能推到参数的类型,不能推导返回值。原生指针也是一种迭代器,支持* ,->,++等操作stl中的sort方式,只对能够randomaccess的迭代子。对于list slist这样的迭代子的排序方法,是单独提供的。对于list,简单的想法就是通过不断merge操作,实现排序,保证效率,则每次merger的list大小尽量相等。所以伪代码: sort()原创 2015-08-02 18:09:08 · 660 阅读 · 0 评论 -
mutex与spinlock
在写多线程的过程中,难免会遇到锁,一般使用的是mutex或者rwlock。调试的过程中也发现,使用mutex的情况下,spinlock在perf会占有一定的比例。那么1 mutex会在多大程度上影响程序的系能,什么情况下是值得使用的?2 rwlock和mutex在实现上有什么不同?3 spinlock和mutex有什么关系?4 如何看待流行的非锁程序?性能会有提升吗?从原创 2015-07-14 10:04:37 · 1158 阅读 · 0 评论 -
nginx 1.6.2源码分析2 499问题之upstream
upstream作为handler中一位,有重要的作用,和filter等不同的地方是,它不自己产生内容,处于处理链的上游,特殊之处也在于,他需要暂时保留一些数据,等数据回来的时候进行回复?这具体是怎么操作的?1 upstream是如何接收请求的,接收请求的时候必然要创建一个数据结构出来,存一下啦#0 ngx_http_upstream_init_request (r=r@entry=0x原创 2015-07-15 22:25:18 · 823 阅读 · 0 评论 -
c++类内存机制探寻
class的成员变量分为static 和nonstatic两类class的成员方法分为static nonstatic 和virtual三类。class实例化的过程中,实际上实例化的是类的nonstatic成员变量,这也决定了类的内存消耗。继承分为单继承 多继承和虚拟继承。对子类的实例化,会先对父类进行实例化,子类是如何引用父类的,是用指针还是直接包含类的实现,因为每一个子类的父类原创 2015-06-28 12:52:08 · 729 阅读 · 0 评论 -
软件设计之自顶向下
软件设计中,首先要避免的是逻辑依赖循环。在软件逻辑设计中,一般希望设计的软件是金字塔形状的,底层的类是不会依赖上层类的,或者说底层类看不到上层类的存在。就像通讯协议中的分层结构一样,每一层级,对应一个类,则下面的类收到上层类的支配和管理。这样的逻辑依赖就是明确和清晰的,并且在必要的时候,可以对一个层次上的类实现进行修改,在不改变接口的情况下。原创 2015-06-03 15:19:56 · 1262 阅读 · 0 评论 -
内存碎片问题
最近遇到内存碎片的问题,查了一些资料,目前来看最好的内存分配的算法还是jemalloc或者tcmalloc,两者在测试效率的时候不分伯仲,但是不知道在碎片率上有没有差别。目前看过的动态管理内存的算法:1 libc库中使用的pkmalloc2 jemalloc,据说firefox使用了jemalloc后内存碎片变小了,对valgrid进行了支持3 tcmalloc,这个支持了goog原创 2015-05-29 00:37:25 · 653 阅读 · 0 评论 -
protobuf
protobuf纪要1 proto文件生成是靠protoc这个程序进行的,这个程序会调用libprotoc.so产生具体的文件。如果想更改产生的文件的内容,则应该更改proto库中的compile中的cpp文件,安装替换libprotoc.so2 proto中的message类型数据,都是指针引用原创 2015-05-29 14:58:03 · 446 阅读 · 0 评论 -
一个展开的boost unordermap内存结构
{ (boost::unordered::detail::table(boost::unordered::detail::map( std::allocator(std::pair(std::basic_string(char, std::char_traits(char), std::allocator(char) ) const, int) ), std::basi原创 2015-03-23 11:29:19 · 1039 阅读 · 0 评论 -
传递指针和指针的引用的差别
传递的指针是值的传递,传递后会在被调函数的栈中占用一定的空间,这个空间存放的是被指向区域的地址,因此也只能改这部分的取值,原来的指针的指向地址是改变不了的。传递指针的引用,相当于传了指针的指针,但是我们任然按照指针来用,引用不在栈中占据空间,指针的引用意味这我们能改变指针的指向,这个改动会传递到调用函数中。原创 2016-06-14 11:35:54 · 585 阅读 · 1 评论
分享