
c/c++
长空飞鹰
互联网IT技术族
展开
-
Zero-Copy&sendfile浅析
服务器响应一个http请求的步骤如下: 1 把磁盘文件读入内核缓冲区 2 从内核缓冲区读到内存 3 处理(静态资源不需处理) 4 发送到网卡的内核缓冲区(发送缓存) 5 网卡发送数据 数据从第一步中的内核缓冲区到第四步的内核缓冲区白白绕了一个圈,没有任何变化浪费了时间 而sendfile系统调用就是来解决这个问题的。sendfile省略了上面的 2、3步,磁盘文转载 2016-03-12 15:19:27 · 1092 阅读 · 0 评论 -
c++学习渐进数目
《 Inside the C++ObjectModel》我自己现在也在看这本书,对C++对象模型介绍的非常好,是深入了解C++的资料书籍。C++学习应该从两个方面来学习,首先学习C++语言层面,也就是C++语法,如果深入学习的话就会进入C++底层。。。第二个层面就是对象,设计很广泛:对象设计,对象复用,STL,COM,BOOST。。。 1. 《The C++Programming La转载 2009-02-17 09:23:00 · 716 阅读 · 0 评论 -
各种字符串Hash函数比较
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函转载 2011-11-23 12:10:29 · 943 阅读 · 0 评论 -
关于C++中的大小端、位段(惑位域)和内存对齐
听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能加深对计算机系统的理解。 声明:由于本文的代码会受到计算机环境的影响,故在此说明本篇博文中的程序的运行环境。 1、Mi转载 2011-11-24 18:57:22 · 902 阅读 · 0 评论 -
C++笔试题
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。请问:能不能同时用static和const修饰类的成员函数?分析:答案是不可以。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为s转载 2011-11-25 15:00:20 · 494 阅读 · 1 评论 -
c/c++笔试题大解析
1. 以下三条输出语句分别输出什么?[C易] char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] =转载 2011-11-25 14:59:30 · 477 阅读 · 1 评论 -
C++ 容器类简介
C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。若需要存储的元素数在编译器间就可以确定,可以使用数组来存储,否则,就需要用到容器类了。 1、vector 连续存储结构,每个元素是在内存上是连续的; 支持高效的随机访问和在尾端插入/删除操作,但其他位转载 2011-11-25 14:59:13 · 435 阅读 · 0 评论 -
time函数
C/C++中的日期和时间头文件 time.h函数用途 函数名得到处理器时间 clock得到时间差 difftime设置时间 mktime得到时间 time得到以ASCII码表示的时间 asctime得到字符串表示的时间 ctime得到指定格式的时间 strftime摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,转载 2011-11-25 14:59:04 · 765 阅读 · 0 评论 -
c typedef
在C语言的情况下,与C++稍有出入。typedef在结构体定义,还有一些数组等地方都大量的用到。归纳一下:来源一:Using typedef toCurb Miscreant CodeTypedef声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef避免缺欠,从而使代码更健壮。typ转载 2011-11-25 14:58:56 · 502 阅读 · 0 评论 -
float和double类型的内存分布和比较方法
C/C++的浮点数据类型有float和double两种。类型float大小为4字节,即32位,内存中的存储方式如下: 符号位(1 bit) 指数(8 bit)尾数(23 bit) 类型double大小为8字节,即64位,内存布局如下: 符号位(1 bit)指数(11 bit) 尾数(52 bit) 符号位决定浮点数的正负,0正1负。指数和转载 2011-11-25 14:58:43 · 667 阅读 · 0 评论 -
dynamic_cast
用法dynamic_cast ( expression )该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。dynamic_cast主要用于类层次间的上行转换和下行转换,转载 2011-11-25 14:58:38 · 392 阅读 · 0 评论 -
CONST
C中的CONSTC中CONST的使用:const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 首先来分析switc转载 2008-12-04 20:49:00 · 677 阅读 · 0 评论 -
c语言中static 用法总结
一、c程序存储空间布局C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:转载 2008-12-04 20:49:00 · 753 阅读 · 0 评论 -
sendfile
在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile到底是什么呢?它的原理又是如何呢? 在传统的文件传输里面(read/write方式),在实现上其实是比较复杂的,需要经过多次上下文的切换,我们看一下如下两行代码: read(file,转载 2012-02-22 13:24:39 · 608 阅读 · 0 评论 -
glib常用库函数和一些定义
glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。glib是Gtk +库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等。glib为许多标准的、常用的C语言结构提供了相应的替代物。使用glib库的程序都应该包含glib的头文件glib.h。########################### glib基本类型定转载 2009-02-17 10:57:00 · 1192 阅读 · 0 评论 -
C++著名程序库的比较和学习经验
C++著名程序库的比较和学习经验1、C++各大有名库的介绍——C++标准库 2、C++各大有名库的介绍——准标准库Boost 3、C++各大有名库的介绍——GUI 4、C++各大有名库的介绍——网络通信 5、C++各大有名库的介绍——XML 6、C++各大有名库的介绍——科学计算 7、C++各大有名库的介绍——游戏开发 8、C++各大有名库的介绍——线程 9转载 2011-12-31 19:06:56 · 10396 阅读 · 15 评论 -
stl map 总结
map是c++的一个标准容器,它是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key.它使用红黑树实现,查询和插入时间效率都是log(n),元素是自动按key升序排序 1. map最基本的构造函数; mapmapstring; mapmapint; mapmap原创 2011-11-25 14:59:21 · 486 阅读 · 0 评论 -
alloca malloc realloc calloc
alloca是在栈里分配内存另外三个是在堆里分配内存。 三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t numElements, size_t sizeOfElement);都在stdlib.h函数库内它原创 2011-12-04 18:44:42 · 774 阅读 · 0 评论 -
hash_map总结
0 为什么需要hash_mapmap提供一个很常用的功能,实现使用了红黑树,效率很高,100万条记录,最多也只要20次的比较,就能找到你要找的记录;200万条记录事,也只要用21次的比较。has_map只需要一两次比较.虽然hash_map目前并没有纳入C++ 标准模板库中,但几乎每个版本的STL都提供了相应的实现。而且应用十分广泛。 1 数据结构:hash_map原理hash原创 2011-12-05 12:31:12 · 1030 阅读 · 0 评论 -
如何在DEV C++里嵌入汇编
呵呵,这方面的资料很多,但是东是东一鳞西一爪的。这篇也算我自己的一个小总结吧!在Dev C++里使用内联汇编的格式不同于VC的,这一点需要注意:VC里采用的是Intel的格式,而Dev C++采用的是AT&A的汇编格式。如下例:#includeint main(){ printf("Test inline asm\n"); //在此插入一个int 3中断转载 2011-12-02 18:50:12 · 1222 阅读 · 0 评论 -
C++笔试题——华为
,后果很严重。个人答案,仅供参考。呵呵,不过保证绝大多数答案的准确性。1.写出判断ABCD四个表达式的是否正确,若正确,写出经过表达式中 a的值(3分)int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);a = ?答:C错误,左侧不是一个有效变量,不能赋值,可改转载 2011-11-25 14:59:35 · 550 阅读 · 0 评论 -
浅谈C++容器
什么是容器首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。转载 2011-11-25 14:59:17 · 397 阅读 · 0 评论 -
gprof
一 gprof功能简介Gprof功能:打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。有了函数的调用关系,这会让开发人员大大提高工作效率,不用费心地去一点点找出程序的运行流程,这对小程序来说可能效果不是很明显,但对于有几万,几十万代码量的工程来说,效率是毋庸置疑的!而且这个功能对转载 2011-11-25 14:58:30 · 483 阅读 · 0 评论 -
C整型升级和寻常算术转换
ANSI C中的整型升级 char,short int或者int型位段(bit-field),包括它们的有符号或无符号变型,以及枚举类型,可以使用在需要int或unsigned int的表达式中,如果int可以完整地表示源类型的所有值,那么该类型的值就转换为int,否则转换为unsigned int。 ANSI C中的寻常算术转换 当执行算术运算时,操作数的类型转载 2008-12-04 20:47:00 · 620 阅读 · 0 评论 -
GCC精彩之旅
在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如 何灵活运用C编译器。目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSIC标准的编译系统,能够编译用C、C++和ObjectC等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以转载 2009-02-17 09:25:00 · 673 阅读 · 0 评论 -
C/C++中怎样获取日期和时间
C/C++中怎样获取日期和时间摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。 关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),c转载 2011-11-25 14:59:00 · 787 阅读 · 0 评论 -
new vs malloc
1、new 是c++中的操作符,malloc是c 中的一个函数 2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数 3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。 4、new 和 malloc转载 2011-11-25 14:58:35 · 435 阅读 · 0 评论 -
gprof使用方法
gprof的适用范围gprof可以用来分析系统在运行时各函数调用的次数,耗时等情况,可以方便地帮助我们定位系统的瓶颈,同时也能让我们知道对程序的那个位置就行优化能够带来尽可能大的性能提升。gprof优化尤其适用于CPU、内存密集性的应用模块。gprof的安装使用目前我们的linux主机上大多都安装了gprof,详细的参数等可以通过man gprof查看。需要重点指出的是,目转载 2011-11-25 14:58:26 · 881 阅读 · 0 评论 -
Valgrind
Valgrind是什么?Valgrind是一个提供程序调试及性能分析的工具集。其包含的工具主要有Memcheck,Cachegrind,Callgrind,Massif等。其中,最为常用的是Memcheck,其主要用来检查程序heap上的内存使用情况。本文档主要介绍Memcheck的用法和一些使用技巧。其官方网站是: http://valgrind.org/ Valgr转载 2011-11-25 14:58:21 · 631 阅读 · 0 评论 -
C++开发常用工具“群英会”
---->Turbo c DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:) ---->Visual C++ 6.0/7.0 稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不错,比如:Spy++。但编译器较之同类转载 2009-02-16 22:30:00 · 527 阅读 · 0 评论 -
学习C++:实践者的方法
前言 我的blog以前很长一段时间关注的都是C++中的技术&细节,乃至于读者和应者都寥寥。然而5月份的时候写的一篇“你应当如何学习C++”,阅读量却达到了3万多,在blog上所有文章中却是最高的(且远远超过了第二位);评论数目也有一百多。为什么独独这篇能够激起这么多的回应,想必是国内的C++社群被C++压抑太久,或者,严格来说,是被C++的教育方式压抑太久。实际上,不管是在各大国内论坛转载 2009-02-17 09:24:00 · 3964 阅读 · 11 评论 -
GDB 调试器使用手册
使用GDB: 本文描述GDB,GNU的原代码调试器。(这是4.12版1994年一月,GDB版本4。16)* 目录:* 摘要: GDB的摘要* 实例: 一个使用实例* 入门: 进入和退出GDB* 命令:转载 2009-02-17 12:25:00 · 419 阅读 · 0 评论 -
C++ 常见崩溃问题分析
一、前言从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来的经验,以期通过自己的经历为他人和自己带来福祉:写出更高质量的程序; 由于 C 和 C++ 这两种语言血缘非常近,文本亦对 C 编程语言有借鉴作用; 二、C++ 崩溃分类转载 2011-11-24 19:16:12 · 3408 阅读 · 0 评论 -
字符,字节和编码
级别:中级摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅读本文时需要慢读多想,多思考。引言“字符转载 2009-02-17 10:58:00 · 483 阅读 · 0 评论 -
c编程修养
1、版权和版本 ——————— 好的程序员会给自己的每个函数,每个文件,都注上版权和版本。 对于C/C++的文件,文件头应该有类似这样的注释: /************************************************************************ * * 文件名:network.c * * 文件转载 2009-02-17 09:21:00 · 636 阅读 · 0 评论 -
hash_map介绍
0为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法转载 2011-11-25 14:59:25 · 465 阅读 · 0 评论 -
C++字符串分析
字符串字符串在百度PS的地位自然不必多说,如果你有代码权限的话,在检索端任意模块的源码中strcpy就知道了。从用户输入的一个query分析、0个字符组成,也就是空串,千万不要小瞧空串,很多程序c++中的StringBuffer类。所有变长字符串还是在长度上有个极限,一般的说这个极限只依赖于可获得的内存的数量。定义中并没有限定字符串的表示法和组织形式,虽然通常NUL(0)为结束符,而组转载 2011-09-07 21:24:25 · 1116 阅读 · 0 评论 -
GCC 命令行详解
1。gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译2。gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名转载 2009-02-17 12:23:00 · 363 阅读 · 0 评论 -
c++笔试题汇总
①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:struct linka转载 2011-11-25 15:00:16 · 545 阅读 · 0 评论 -
c++编程修养
1、版权和版本 ——————— 好的程序员会给自己的每个函数,每个文件,都注上版权和版本。 对于C/C++的文件,文件头应该有类似这样的注释: /************************************************************************ * * 文件名:network.c * * 文件描述:转载 2011-11-25 14:59:43 · 649 阅读 · 0 评论