- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 C++/C 常量
C++/C 常量 常用的常量可以分为:字面常量、符号常量、契约性常量、布尔常量、和枚举常量1、字面常量这种常量最为常见,例如直接出现的各种进制的数字、字符(‘’括住的单个字符)或者字符串(“”括住的一系列字符)等。实际上,只存在基本数据类型的字面 常量。字面常量只能引用,不能修改,语言实现一般讲它保存在程序的符号表里,而不是一般的数据区中。符号
2013-06-30 16:48:50 1071
原创 C++标准库的数值极限numeric_limits
C++标准库的数值极限numeric_limits一般来说,数值类型的极值是一个与平台相关的特性。c++标准程序库通过template numeric_limits提供这些极值,取代传统C语言所采用的预处理常数。你仍然可以使用后者,其中整数常数定义于和,浮点常数定义于和,新的极值概念有两个优点,一是提供了更好的类型安全性,二是程序员可借此写出一些template以核定这
2013-06-29 15:16:15 1840
原创 如何在CMD下编译连接.CPP文件
如何在CMD下编译连接.CPP文件 /////////////////////////////////////////////mycopy.cpp存放在D盘下D:\mycopy.cpp(或是其它路径).////////程序启动时的"命令行参数"与调用main()的"函数实参"不同.////////命令行参数是由启动程序截获并找包成字符串数组后传递给ma
2013-06-29 10:43:46 2630
原创 linux下C语言中的flock函数
linux下C语言中的flock函数 表头文件 #include 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。 参数 operation有下列四种情况
2013-06-28 11:38:22 1927
原创 Nginx的配置与部署及例子
Nginx的配置与部署及例子1. Nginx程序包目前最新的开发版本时1.1.12:Linux/Unix:nginx-1.1.12.tar.gzWindows:nginx-1.1.12.zip我们可以下载稳定版尝试:Linux/Unix:nginx-1.0.11.tar.gzWindows:nginx-1.0.11.zip2. 下载,解压,安装N
2013-06-27 16:36:12 2098
原创 一个简单的Key-Value小数据库tmdb的原理和实现
一个简单的Key-Value小数据库tmdb的原理和实现1 基本特点ey-Value 数据库是很早起比较典型的老式数据库,从Unix早期的dbm,后来的GNU版本的gdbm,还有ndbm,sdbm, cdb 以及功能强大的Berkeley DB (BDB)、还有这两年风头很劲的qdbm,都是典型代表。实际上来说,Key-Value 数据库不是严格意义上的数据库,只是一个简单
2013-06-27 09:57:02 4712
转载 linux调优基本策略—ulimit
linux调优基本策略—ulimit ulimit -a 用来显示当前的各种用户进程限制。 Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况, 设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个: ulimit -u 10000 对于需要做许多 socket
2013-06-27 08:54:24 1123
原创 对一个大型工程的makefile编写的一点思考
对一个大型工程的makefile编写的一点思考 近期有位企业大牛给了我一个工程,是他自己写的代码,是关于makefile自动编译的,我从中得出了一些启发。 一般在大型工程中需要写很多的makefile,而且每个目录与子目录中都需要写makefile文件。 现在有了一个思路,可以利用一个公共的makefile文件,利用一个命令封装make命
2013-06-26 21:30:56 1754
原创 Makefile中使用$$的使用
Makefile中使用$$的使用 在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢,区别大了。不要认为在makefile的规则的命令行中使用$var就是将makefile的变量和shell共享了,这里仅仅是读取makefile的变量然后扩展开,将其值作为参数传给了一个shell命令。而$$var是在访问一个shell命令内
2013-06-25 22:02:53 1092
原创 gcc警告和错误选项
gcc警告和错误选项 -ansi该选项不能保证没有警告的程序就是遵循ANSI C标准,如,该选项会对返回值为void的main函数发出警告,但它会忽略GNU语法扩展的数据类型long long而不发出警告。-pedantic允许gcc发出遵循严格ANSI C标准语法的所有警告。如,对数据类型long long发出警告。-pedantic-errors
2013-06-25 20:32:55 3123
原创 Virtualbox虚拟机设置与主机的共享文件夹
Virtualbox虚拟机设置与主机的共享文件夹首先到官方网站下载安装扩展包,然后打开linux虚拟机,上方菜单栏->设备->安装增强功能,等待安装完成后,重启,完成,此过程保证虚拟机能够联网。Linux虚拟机:1、首先在virtualbox中设置虚拟机,共享文件夹->固定分配,选定文件夹,并选择自动挂载;2、共享文件夹在linux中
2013-06-25 16:51:07 1170
原创 gcc对C语言的扩展:函数参数构造
gcc对C语言的扩展:函数参数构造在不知道一个函数所接收到的参数的个数或类型的情况下,我们可以用GCC有一套内建函数记录下参数并将他们用于调用其他的函数。你也能够在不知道一个函数的返回类型的情况下获得函数调用的返回结果,然后再返回这个结果(只要调用你所在函数的调用者能接收这个返回值的数据类型)。Built-in Function: void * __builtin_ap
2013-06-25 15:32:43 1827
原创 linux下的程序分析工具——gprof
linux下的程序分析工具——gprof GNU gprof 是一款linux平台上的程序分析软件(unix也有prof)。借助gprof可以获得C程序运行期间的统计数据,例如每个函数耗费的时间,函数被调用的次数以及各个函数相互之间的调用关系。gprof可以帮助我们找到程序运行的瓶颈,对占据大量CPU时间的函数进行调优(gprof统计的只是CPU的占用时间,对I/O瓶颈貌似无能
2013-06-24 11:41:44 1203
原创 一个完整的编译器前端实验
一个完整的编译器前端实验这个编译器前端实验所用的代码为龙书《编译原理》附录A的代码。这个代码可以下载,地址为:http://download.csdn.net/detail/rill_zhen/4464467 或者 http://dragonbook.stanford.edu/#source。 使用方法:编译:tar xf dragon-fr
2013-06-24 10:09:45 3276 2
原创 图着色算法详解
图着色算法详解图着色算法简介 图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化问题——若一个图最少需要m种颜色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的最小色数m的问题称为m-着色优化问题。
2013-06-20 17:06:17 24723 1
原创 linux中无法获得锁 /var/lib/dpkg/lock
无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)问题:运行程序更新时出现报错:无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)解决:其实这是因为有另外一个程序在运行,导致锁不可用。原因可能是上次运行更新或安装没有正常完成。解决办法是杀死此进程sudo rm /var/cache/
2013-06-19 21:59:00 6048
原创 用Yacc做语法分析
用Yacc做语法分析YACC简介Yacc 全称 Yet Another Compiler CompilerYacc是一个用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器主要是用C语言写成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把两部份产生出来的C程序一并编译。作为 Yacc 对说明文件中的 %token NUMBER 声明的对应。Ya
2013-06-18 10:54:16 2705
原创 COM之QueryInterface函数
COM之QueryInterface函数客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下 Interface IUnknown { virtual HRESULT __stdcall Que
2013-06-16 23:04:37 1126
原创 关于返回值RESULT
关于返回值RESULTHRESULT(Here's the RESULT)值分成32位值, HRESULT值中16到30这15个比特位包含的是设备代码。设备代码标识的是可以返回HRESULT返回代码的操作系统部分。由于Windows操作系统是由Microsoft开发的。因此它保留有定义设备代码的权力。 HRESULT值的查找
2013-06-16 22:59:39 2046
原创 Windows 纤程详解
Windows 纤程详解 在Windows2000/XP中,纤程(fiber)相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同. 纤程包含独立的目态栈,寄存器状态的控制信息.目态控制的纤程转接要求较高的编程经验.由于纤程属于目态对象,一个纤程被封锁意味着所在
2013-06-13 23:53:23 4385
原创 多线程编程中的条件变量和虚假唤醒(spurious wakeup)
多线程编程中的条件变量和虚假唤醒(spurious wakeup)1. 概述 条件变量(condition variable)是利用共享的变量进行线程之间同步的一种机制。典型的场景包括生产者-消费者模型,线程池实现等。 对条件变量的使用包括两个动作: 1) 线程等待某个条件, 条件为真则继续执行,条件为假则将自己挂起(避免busy wait,节省CPU资源); 2) 线
2013-06-13 20:20:10 1642
转载 一个简单词法分析器的C语言实现
一个简单词法分析器的C语言实现1.1实验描述例如:对源程序:begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列:…… 1.1.1待分析的简单的词法(1)关键字: begin if then while do end所有的关键字
2013-06-13 14:07:30 18881 2
原创 词法分析器简介
词法分析器简介引言 编译器的工作的开始,就是读入源码(预编译先不考虑),然后,去除一些空字符,然后经过词素匹配,并和其属性(可选),组成一个的词法单元,多个词法单元,连接成词法单元序列。自此,此法分析器的工作就算完成了。呵呵,就这么简单。可见,找到一个词素,是词法分析器的核心工作,那,如何获得一个词素呢?就是本节要讨论的主要内容。1.1工作流程上面已经简单描
2013-06-13 10:53:32 1758
原创 gcc编译器概览
gcc编译器概览引言gcc现在的意思是“GUN编译器集合”,这里说的是上个世纪的意思“GUN C语言编译器”。 1.1程序的一般编译过程以gcc为例:一般情况下,比如我们有一个源文件:main.c,里面写的是我们的代码。想执行以下,gcc main.c,执行以下这个命令就会生成一个a.out的文件。然后./a.out就可以执行了。但是,这中间
2013-06-13 10:46:25 1109
原创 用Lex工具做词法分析
用Lex工具做词法分析一. Lex介绍Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。 这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。 当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。 它一次读入一
2013-06-06 17:13:56 6853
转载 shared_ptr线程安全性分析
shared_ptr线程安全性分析正如《STL源码剖析》所讲,“源码之前,了无秘密”。本文基于shared_ptr的源代码,提取了shared_ptr的类图和对象图,然后分析了shared_ptr如何保证文档所宣称的线程安全性。本文的分析基于boost 1.52版本,编译器是VC 2010。shared_ptr的线程安全性boost官方文档对shared_ptr
2013-06-06 15:20:59 1297
原创 Boost智能指针:scoped_ptr shared_ptr weak_ptr
Boost智能指针:scoped_ptr shared_ptr weak_ptr一. scoped_ptrboost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:#include #include #include cla
2013-06-06 14:56:21 1284 1
原创 Observer模式简介
Observer模式简介软件设计中会碰到这样的关系:一个对象依赖于另一个对象,必须根据后者的状态更新自己的状态,可以把后者称作目标对象,前者称作观察者对象。不但观察者依赖于目标,当目标的状态改变时也要通知观察者,这就出现了双向的依赖。两个对象互相依赖的后果是它们必须一起复用。如果一个目标有多个观察者,那么目标也依赖所有观察者,从而目标对象无法独立复用。如何消除目标和观察者之间的互相
2013-06-06 10:33:59 1560
原创 RAII惯用法:C++资源管理的利器
RAII惯用法:C++资源管理的利器RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。当讲述C++资
2013-06-06 09:19:00 917
原创 使用rpcgen构建分布式程序的一个简单例子
使用rpcgen构建分布式程序的一个简单例子一. RPC概念1.1 介绍 在中间件的实现中,引入了远程过程调用RPC(Remote Procedure Call)的概念。同时,许多分布式系统是基于进程间的显式消息交换的,然而消息的发送和接收过程无法隐藏通信的存在,而通信的隐藏对于在分布式系统中实现访问透明性是极为重要的。因此这个问题在很长一段时间内都没有找到合适的
2013-06-01 21:15:10 2121
原创 RPC外部数据表示(XDR)
RPC外部数据表示(XDR) RPC的xdr(外部数据表示)是为了编码(解码)C语言定义的数据,从而使得RPC传输的数据平台无关性。 XDR对C语言常见的类型编码规则在之前已经说过了,具体请参考《unix网络编程卷二》。对于说明书test.x定义的定义,最终会被rpcgen翻译成支持C语言支持的类型定义,之后test.x就没有任何作用了。 下面以一个例子来
2013-06-01 15:59:09 5712
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人