
Linux
EINPROGRESS
这个作者很懒,什么都没留下…
展开
-
内存泄漏检测原理
众所周知,c/c++语言的内存回收依赖于程序员,并没有python,java之类的自动回收。那么内存是申请释放就是个需要认真对待的问题。因为往往诸如服务器是需要长期运行的,即便轻微的内存泄漏也将可能带来严重问题。而且这种bug还存在着复现周期长,难以定位的问题。 链接器有个选项–wrap,当查找某个符号时,它优先先解析__wrap_symbol, 解析不到才会去解析s...原创 2018-04-16 00:05:18 · 2879 阅读 · 0 评论 -
深入理解c++函数调用的参数传递与局部变量申请
引言 工作中最难以解决的BUG莫过于偶现,复现周期长,难以定位的,而有时core也是缺少调试信息的。这种情况下就需要通过堆栈还原工作现场来分析问题。尽管现在诸多解释性语言蓬勃发展,但语言的根本汇编我们还是需要掌握,无论对于解bug还是分析语言本质都有着奇效。掌握事物的本质才是真正的理解。测试代码 测试代码如下所示,很简单的例子。我们编译后使用gdb来分析函数调用前...原创 2018-05-13 21:58:30 · 2298 阅读 · 2 评论 -
深入理解c++多态实现原理
引言 多态是指通过基类的指针或者引用,在运行时动态调用实际绑定对象函数的行为。与之相对应的编译时绑定函数称为静态绑定。多态是面向对象编程的核心思想之一,因此我们有必要深入探索一下它的实现原理。理解了原理才能更好的使用。前置条件 现有代码如下所示,非常简单的例子。通过基类的引用调用recv函数来触发多态。接下来的分析涉及汇编知识,如果还没熟悉汇编,可以看另外一篇文章<...原创 2018-05-20 01:54:00 · 12296 阅读 · 1 评论 -
从零编写c++之http服务器(1)-线程池
引言 编写这么一个c++的http服务器,纯粹是满足多年前一个好奇心。为什么我输入链接可以打开一个网页?这背后究竟发生了什么?所以本着好事多磨的心理一点点从零写了这个http服务器。他有着以下几个特点。1) 基于epoll的异步事件驱动框架2) L/F线程池处理网络事件3) 完全从零编写http服务模块 当然实现中为了研究原理,仅做了关键功能的开发,...原创 2018-07-27 22:25:12 · 4312 阅读 · 2 评论 -
从零编写c++之http服务器(2)-epoll异步事件驱动框架
epoll是select/poll基础上改进的为大规模描述符事件监测的机制,常出现在高性能,高并发的服务器设计中。在这里我们需要设计一个框架,实现套接字对象将自身注册到框架中,框架即可利用epoll对其套接字进行事件监测;当事件产生时通知相应的套接字对象。从而实现事件的监测与处理解耦。惯例还是献上类图。完整源码见<https://github.com/kwansoner/p...原创 2018-07-27 22:26:28 · 2789 阅读 · 6 评论 -
从零编写c++之http服务器(3)-http服务
http全称超文本传输协议,可调试性高,扩展性也强。上两个篇章我们已经拥有了epoll事件驱动框架和线程池处理网络事件,接下来我们要先写一个基础网络套接字,然后在此基础上扩展出http的套接字。献上类图如下完整源码见<https://github.com/kwansoner/panda.git> ...原创 2018-07-27 22:32:42 · 18437 阅读 · 2 评论 -
coredump生成名与可执行文件名不一致原因分析
众所周知,linux下进程当收到某些信号而终止时,会保存进程上下文信息进入coredump文件中;以帮助程序员们分析调试。它可以通过执行如下命令使能coredump生成。其生成路径定义在/proc/sys/kernel/core_pattern文件中,生成文件名格式定义在内核源码的Documentation/sysctl/kernel.txt。如下我定义生成文件名规则是%e_%P_...原创 2018-11-22 01:12:30 · 1127 阅读 · 1 评论 -
redis ADDSLOTS支持区间输入实现
背景 最近在阅读redis源码,发现redis集群应用情景时,添加slot命令ADDSLOTS只接受slot按个输入, 没有办法直接按区间分配。这样就存在一个不是很友好的问题,redis定义共有16384个slot,只有所有slot都分配有节点处理时,集群进入上线状态。相反,如果redis中存在一个slot没有分配到节点处理,集群则处于下线状态。这样要分配16384个slot确实...原创 2019-01-27 23:37:39 · 3409 阅读 · 1 评论