lan - c/c++
农夫ben
BEN,网名“农夫”,主要从事于互联网后台开发工作,把用户使用习惯和盈收最大化作为主要开发原则,专注于后端服务性能优化、分布式系统、大数据。
展开
-
stl-queue
Queueall queue functions________________________________________// Queue is a container adapter that gives// the programmer a FIFO (first-in, first-out)// data structure. // push, pop, size, fr转载 2012-09-07 13:46:22 · 366 阅读 · 0 评论 -
程序在内存中的分布
在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。从低地址到高地址,可分为下面几段: 预留内存地址(操作系统维护的内存地址,不可访问) 程序代码区(只读,存代码和一转载 2013-05-16 16:50:33 · 557 阅读 · 0 评论 -
typedef和#define的用法与区别
typedef和#define的用法与区别一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;typedef可以增原创 2013-05-23 09:40:24 · 612 阅读 · 0 评论 -
assert断言
有很多时间我们在开发程序的时间都需要调试,这时要加入大量断言assert语句,但assert加得太多程序会变慢。所以在发布程序前要调用#define NDEBUG 禁用断言.断言是一个宏,当表达式为假时抛出异常,产生abort#include assert(1 != 1); 断言触发assert(1 == 1); 断言不会触发原创 2013-05-23 10:22:47 · 606 阅读 · 0 评论 -
算法之hash表
hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。打个比方来说,所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显得非转载 2013-05-23 10:02:48 · 519 阅读 · 0 评论 -
宏定义单引号和双引号
在宏定义中经常会用到#和##单井号(#)把传递过来的参数当成字符串进行替代如下示例: 程序代码#define display(name) printf(""#name"")int main() {display(name);}输出:name双井号(##)称为连接符在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的原创 2013-05-23 16:44:09 · 9589 阅读 · 0 评论 -
VC字符串转换
一、BSTR、LPSTR和LPWSTR 在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。 那么什么是BSTR、LPSTR以及LPWSTR呢? BSTR(Basi转载 2013-06-11 16:42:10 · 473 阅读 · 0 评论 -
linux下so动态库一些不为人知的秘密
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/lslinux-vdso.so.1 => (0x00007fff597ff000)libsel转载 2013-06-14 16:46:36 · 1763 阅读 · 0 评论 -
linux 下开发服务性能评估参考表
一个专业linux开发人员,应该知道如何评估和预算自己服务,心中有个参考尺度。这个尺度就是一张表,用来评估换算。下面这个表示我收集的一些数据,不是很全,但是很基础。现在分享出来。同时也希望有朋友能补充一些数据。这样更加全面。对各位码农和架构师更有帮助。操作性能memset 1K150W次/s转载 2013-06-14 16:51:30 · 759 阅读 · 0 评论 -
WaitForSingleObject作用
临界区临界区是一种最简单的同步对象,它只可以在同一进程内部使用。它的作用是保证只有一个线程可以申请到该对象void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection );产生临界区void DeleteCriticalSection(LPCRITICA原创 2013-06-06 14:41:56 · 7784 阅读 · 1 评论 -
C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp]转载 2013-05-16 16:45:56 · 484 阅读 · 0 评论 -
堆和栈
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态转载 2012-12-12 11:36:15 · 345 阅读 · 0 评论 -
c sockopt选项
Linux下getsockopt/setsockopt 函数说明【 getsockopt/setsockopt系统调用】 功能描述:获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的原创 2012-12-12 11:34:51 · 563 阅读 · 0 评论 -
stl-list
listassign________________________________________// assign a sequence to the list#include #include #include #include using namespace std;int main (){ int ary[]={1,2,3,4,5}; list转载 2012-09-07 13:46:59 · 378 阅读 · 0 评论 -
stl-vector
Vectorconstructors________________________________________#include #include #include #include using namespace std;int main (){ string str[]={"Alex","John","Robert"}; // empty vector o转载 2012-09-07 13:45:25 · 376 阅读 · 0 评论 -
i/o多路复用
auth:农夫-Benemail:szjava#126.com(请把#换成@)blog:http://blog.csdn.net/zll_liang最常见的i/o多路复用就是:select poll epoll了,下面说说他们的一些特点和区别吧。select/* 可读、可写、异常三种文件描述符集的申明和初始化。*/fd_set readfds, writefd原创 2012-09-07 14:22:40 · 1646 阅读 · 0 评论 -
c++的位运算
前言 看到有些人对位运算还存在问题,于是决定写这篇文章作个简要说明。 什么是位(bit)? 很简单,位(bit)就是单个的0或1,位是我们在计算机上所作一切的基础。计算机上的所有数据都是用位来存储的。一个字节(BYTE)由八个位组成,一个字(WORD)是二个字节或十六位,一个双字(DWORD)是二个字(WORDS)或三十二位。如下所示:转载 2012-10-12 13:39:38 · 435 阅读 · 0 评论 -
gdb调式
一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、动态的改变你程序的执行环境。从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发原创 2012-09-26 10:05:28 · 570 阅读 · 0 评论 -
gcc常用选项
-o FILE指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out-c只编译不链接,由.c生成.o-E对输入文件进行预处理,使用这个命令时,预处理器的输出被送到标准输出,而不是文件里-S只对文件进行编译,不进行汇编和连接,由.c生成.s-g在可执行程序中包含标准调试信息-w关闭所有警告,原创 2012-09-26 09:56:03 · 453 阅读 · 0 评论 -
c/c++五十社区
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段2、htt转载 2012-11-02 00:24:45 · 2164 阅读 · 0 评论 -
c结构体字节对齐
首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首地址等于整个结构体实例的首地址。比如有这样一个结构体: struct vector{int x,y,z;} s; int *p,*q,*r; struct vector *ps; p = &s.x; q = &s.y;转载 2012-12-12 11:35:29 · 432 阅读 · 0 评论 -
c字节对齐
一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些转载 2012-12-12 11:33:15 · 387 阅读 · 0 评论 -
linux daemon进程为什么要fork 2次?
daemon进程是后台守护进程,有时候也叫精灵进程(agent).linux 下server都是daemon进程。相信大部分开发人员都知道如何去写一个daemon进程。但是另一方面,大部分人不知道为什么要这么做,不少人是从某个地方copy一个函数,拿来主义。但是具体为什么这么实现,却不是很透彻。见过一些面试官或被面试人。很多人解释daemon进程存在的理由是因为僵死进程。或者输入输出。原创 2013-06-14 16:49:52 · 2025 阅读 · 0 评论