穷则独善其身,达则兼济天下

工匠之路

2018年7月

July 31, 2018

编程笔记:检测并分析PHP扩展的内存泄露

1. 背景描述基于C/C++开发的程序,内存管理是很大程度上的工作,我们在这篇文章里来给大家讲解一下如何监控程序体可能存在的内存泄露。工欲善其事必先利其器,这里选择使用 Valgrind 工作来进行内存监控。http://valgrind.org/2. Valgrind工具安装 git clone git://sourceware.org/git/valgrind.git ./auto...
July 25, 2018

开源项目:PulseFLow 性能跟踪扩展

背景描述随着公司PHP项目体的不断增大,随着不同工程师的功能迭代,如何有效获取PHP项目的执行性能,对于系统整体模块显得异常重要,PulseFlow是一个性能跟踪扩展,它可以在程序员无感知的情况下有效跟踪每一个函数的执行效率,主要分析CPU时间消耗、内存大小消耗,这个组件除了能够快速记录每个函数体的性能信息,还具备一系列的发送机制,主要包括共享内存队列(System V 和 Posix)、U...
July 24, 2018

编程笔记:C动态连接库编程

动态链接库,可以方便程序体扩展功能、更新组件,相对于编译时连接,具有更大的灵活性,下面我们从三个方面来讲解一个案例。库函数定义在这里,我们首先定义一个简单的加法函数。#include <stdio.h> int add(int a,int b){ return a+b; }动态链接库编译我们通过编译命令对于源码文件进行编译,在linux系统中编译为so文件。gcc -s...

阅读笔记:指针数组和数组指针---C/C++中int *p[4]和int (*p)[4]的区别

简单介绍C/C++中的这两种书写方法实在是很像,但是它们的含义有很大的不同,所以一定要能清晰地辨别它们。简单地说,int *p[4] 是指针数组,int(*p)[4] 是指向数组的指针指针数组:是一个元素全为指针的数组;数组指针:可以理解为指针,只是这个指针类型不是int而是 int[4] 类型的数组int *p[4],p是一个指针数组,每一个指向一个int型的,等价于 (int *) (p...
July 23, 2018

阅读笔记:指针数组和多重指针

# 1. 什么是指针数组一个数组,其元素均为指针类型的数据,被成为指针数组。也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。下面定义一个指针数组。1.1 样例分析2. 指向指针的指针
July 23, 2018

阅读笔记:C语言函数指针

1.指向函数的指针1.1什么是指针函数1.2 怎样定义指向函数的指针变量定义指向函数的指针变量一般形式为:例如 int (*p)(int a, int b); 这里的 “类型名” 是指函数返回值的类型。1.2.1说明定义指向函数的指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定的类型的函数。在同一个程序中,一个指针变量可以先后指向同类型的不同函数。在给指针变量赋值时,...
July 19, 2018

技术科普:LInux下的CC 和 GCC 有什么区别

在Linux下,一会看到CC、一会又看到GCC,很多人感觉很疑惑,不清楚他们二者到底有和区别。为了获取到他们俩之前的区别,其实简单的两行命令就可以获得CC 在Linux环境下的本质。从命令执行结果可以看出,在Linux环境下,CC 是 gcc的一个快捷方式,cc是Unix下的,是收费的,可不像Linux那样可以那来随便用,所以Linux下是没有cc的。

开源项目:基于UDP协议的日志记录系统(LogDarts)

背景介绍日志对于任何一个需要稳定运行的系统都弥足珍贵,如何构造一个高性能的统一日志平台,首先需要解决的是“记录”,如何用最快、性能损耗最小的方式来记录日志?UDP是一个不错的选择:首先UDP通道的带宽需求小,能达到很好的实时性;其次UDP不需要维持连接,在网络传输中的动作少。有人会说,UDP是不稳定传输、使用时数据风险大。对于这点,我们需要考量具体使用环境,在我们的日志系统中,每台机器都会运...