
C/C++
文章平均质量分 88
逆风飞扬
思考着,奋斗着,冷眼观事,热心待人~
展开
-
strlen与sizeof的区别
strlen与sizeof的区别1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''/0''结尾的。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用转载 2011-03-06 19:14:00 · 678 阅读 · 0 评论 -
Why C++ ? 王者归来
因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++, C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C原创 2012-03-13 22:48:25 · 891 阅读 · 0 评论 -
[精华] static 和 const的详解
static 是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式: static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。 1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器原创 2012-08-05 12:55:06 · 792 阅读 · 0 评论 -
strcpy memcpy 完整代码,包括内存块重叠的的情况
下面例1是修改网络上source code得到的一个版本,简洁,完全可以工作,但是没有考虑到src与dest的有重叠区域的情况,例2是个人修改后的代码,考虑了重叠的情况.留着备用,时刻提醒自己要注意代码风格及全面考虑问题.memcpy原理类似.例1:char *strcpy2(char *strDest, const char *strSrc){assert( (strDe原创 2012-10-04 21:20:32 · 1121 阅读 · 1 评论 -
哈希算法分布与一致性哈希算法详解
前言在我们的日常web应用开发当中memcached可以算作是当今的标准开发配置了。相信memcache的基本原理大家也都了解过了,memcache虽然是分布式的应用服务,但分布的原则是由client端的api来决定的,api根据存储用的key以及已知的服务器列表,根据key的hash计算将指定的key存储到对应的服务器列表上。基本的原理以及分布在这里我们通常使用的方法是根据 ke原创 2012-10-05 21:24:13 · 1262 阅读 · 0 评论 -
构造函数为什么不能是虚函数
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。2. 从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身原创 2012-10-29 19:42:41 · 634 阅读 · 0 评论 -
va_list 详解
VA_LIST 是在C语言中解决变参问题的一组宏他有这么几个成员:1) va_list型变量:#ifdef _M_ALPHAtypedef struct { char *a0; /* pointer to first homed integer argument */ int offset; /* byte of原创 2012-11-28 15:57:42 · 749 阅读 · 0 评论 -
stl容器学习总结
stl容器学习总结stl容器学习总结一 迭代器(iterator)迭代器:迭代器是类似指针的对象,STL算法利用它们对存储在容器中的对象序列进行遍历。5种类别:1、输入迭代器 2、输出迭代器 3、前向迭代器 4、双向迭代器 5、随机访问迭代器 常用的迭代器原创 2012-11-15 21:26:12 · 690 阅读 · 0 评论 -
What really happens when you navigate to a URL
As a software developer, you certainly have a high-level picture of how web apps work and what kinds of technologies are involved: the browser, HTTP, HTML, web server, request handlers, and so on.原创 2012-11-19 10:30:00 · 1062 阅读 · 0 评论 -
当你输入一个网址的时候,实际会发生什么?
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件翻译 2012-11-19 20:22:20 · 695 阅读 · 0 评论 -
scanf函数的缓冲区问题
用户输入中多余的数据会丢失吗?scanf函数执行时是否每次都暂停程序的执行以等待用户的输入?答:用户的输入会存储输入缓冲区,而scanf函数只会到输入缓冲区中读取数据。输入缓冲区连接了用户和scanf函数。如何理解“当用户一次输入多个数据时,数据之间常用空格或回车分隔”?答:当遇到空格符或回车符时,scanf函数的处理分二种情况。第一种情况发生在数据匹配正在进行时,即已经有成功原创 2013-06-21 13:21:15 · 1740 阅读 · 0 评论 -
About size_t and ptrdiff_t
AbstractIntroductionsize_t typeptrdiff_t typePortability of size_t and ptrdiff_tSafety of ptrdiff_t and size_t types in address arithmeticPerformance of code using ptrdiff_t and size_tCo原创 2013-06-27 16:25:17 · 1186 阅读 · 0 评论 -
一个“轻量级” C 语言协程库
协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样的程序组件,你可以在一个线程里面轻松创建数十万个协程,就像原创 2014-01-28 14:47:32 · 2431 阅读 · 0 评论 -
memcached源码分析之线程池机制(一)
已经个把月没有写长篇博文了,最近抽了点时间,将memcached源码分析系列文章的线程机制篇给整出来,在分析源码的过程中参考了网上的一些资源。该文主要集中于两个问题:(1)memcached线程池是如何创建的,(2)线程池中的线程又是如何进行调度的。一切从源码中找答案。memcached的线程池模型采用较典型的Master-Worker模型:(1)主线程负责监听客户端的建立原创 2014-01-27 15:29:57 · 850 阅读 · 0 评论 -
memcached源码分析之线程池机制(二)
在上一篇中已分析了memcached线程池的创建流程,由于上篇篇幅较长,因此将memcached线程池中线程的调度流程另立一篇。先让我们把目光转到主函数中,主线程在调用thread_init函数创建好线程池后,就开始创建监听套接字,memcached支持TCP,UDP,UNIX域套接字,因此相应的要创建三种监听套接字这里我们只分析TCP listening socket的创建(UD原创 2014-01-27 15:31:04 · 825 阅读 · 0 评论 -
typedef 函数指针的用法
进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。用法一:typedef int (*MYFUN)(int, int); 这种用法一般用在给函数定义别名的时候上面的例子定义MYFUN 是一个函数原创 2014-04-30 19:13:42 · 584 阅读 · 0 评论 -
Redis运行流程源码解析
概述 Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息(比如:配置信息,统计信息,服务器状态等等)。启动时通过读取配置文件里边的信息对server进行初始化(如果没有指定配置文件,将使用默认值对sever进行初始化),初始化的内容有:起监听端口,绑定有新连接时的回调函数,绑定服务器的定时函数,虚拟内存初始化,log初始化等等原创 2014-04-30 19:06:56 · 824 阅读 · 0 评论 -
GBK与UTF8编码互转的C++版
下面是GBK与UTF8互转的C++实现,原创 2014-05-09 16:42:18 · 5816 阅读 · 1 评论 -
典型的 C++ 程序员成长经历
一个典型的 C++ 程序员成长经历:1. 完整的学一遍 C++ 所有语言特性,典型书籍 "The C++ Programming Language" Part1, Part2, "C++ Primer" 感觉 C++ 像大杂烩(多编程范型),各种精妙的语法特性 (friend, virtual/RTTI, const/mutable, exception, template原创 2012-03-28 11:26:47 · 1207 阅读 · 1 评论 -
游戏程序员的学习相关资料
想 起写这篇文章是在看侯杰先生的《深入浅出MFC》时,突然觉得自己在大学这几年关于游戏编程方面还算是有些心得,因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考。一则是作为自己今后两年学习目标的备忘录,二来没准对别人也有点参考价值。我的原则是只写自己研究过或准备研究的资料,所以内容无 疑会带上强烈的个人喜好色彩,比如对网络,数据库等重要方面完全没有涉及。因为自己主要对三维图形引擎,人工智原创 2011-11-24 10:14:49 · 1237 阅读 · 0 评论 -
C++标准库详解
C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 形式的标准头文件【 例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他转载 2011-08-25 09:24:03 · 1235 阅读 · 0 评论 -
C++虚函数表解析(转) ——写的真不错,忍不住转了
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相转载 2011-03-18 10:55:00 · 934 阅读 · 0 评论 -
Windows下利用C语言获得函数的执行时间
<br />1. 精确到秒,计时单位为秒<br />#include<time.h><br /> <br />time_t start_time,end_time; /* 长整形数据,time_t 为time.h 中的宏定义 ,原型为 #define long time_t */<br />start_time=time(NULL); /*记录循环开始的时间*/<br />/************************<br />* 循环或函数的调用过程<br />*************原创 2011-05-09 21:45:00 · 1798 阅读 · 0 评论 -
C++ 实现的桶排序
<br />//桶排序<br />//原理:要对数组a[n]进行排序,新建一个b[9][n-1]的二维数组,<br />//把a中的元素分别放到数组b中,原则为:<br />//1.根据a中元素个位数的数字放到b中相应的行,如3则放到b中的第三行,100放到第0行<br />//此过程称为分布,用分布函数distributeElments()实现<br />//2.将b中的元素按照顺序复制回a中,此过程称为回收,用回收函数collectElments()实现<br />//3.然后依次按照a中元素的十位,百原创 2011-05-15 10:01:00 · 3320 阅读 · 0 评论 -
C语言中不同的结构体类型的指针间的强制转换详解
<br />C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。<br />一.<br />结构体声明如何内存的分布, <br />结构体指针声明结构体的首地址, <br />结构体成员声明该成员在结构体中的偏移地址。<br /> <br /> 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存原创 2011-05-14 19:49:00 · 10247 阅读 · 7 评论 -
C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
//C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)//调试成功运行#include "iostream"#include "stdlib.h"#include "stdio.h"#include "malloc.h"typedef struct{int key;int otherinfo;}Redsize;typedef struct{ Redsize r[100];int length;}Sqlist;Sqlist L;int n;int LT(int x原创 2011-03-30 21:16:00 · 4222 阅读 · 0 评论 -
C语言位运算详解
<br />位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作<br />运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。<br />C语言提供的位运算符列表:<br />运算符 含义 描述<br />& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0<br />| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1<br />^ 按位异或 若参加运算的两个二进制位值相同则为原创 2011-05-21 20:04:00 · 1132 阅读 · 0 评论 -
32位/64位机上常用数据类型字节数(C语言)
<br />可用如sizeof(char),sizeof(char*)等得出<br />32位编译器<br />char :1个字节<br />char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)<br />short int : 2个字节<br />int: 4个字节<br />unsigned int : 4个字节<br />float: 4个字节<br />double: 8个字节<br />long: 4个字节<br />long l转载 2011-05-22 10:13:00 · 2378 阅读 · 1 评论 -
c 实现测试CPU是大端还是小端
<br />union<br />{<br />unsigned long bits32;<br />unsigned char bytes[4];<br />} unValue;<br />unValue.bytes[0] = 0;<br />unValue.bytes[1] = 1;<br />unValue.bytes[2] = 0;<br />unValue.bytes[3] = 0;<br />isLittleEndian = ( unValue.bits32 == 256 ); <br />//原创 2011-05-23 21:43:00 · 993 阅读 · 0 评论 -
指针函数与函数指针详解 C++函数指针使用
<br />指针函数<br /> 指针函数是指带指针的函数,即本质是一个函数。<br /> 我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示: <br /> 返回类型标识符 *返回名称(形式参数表) <br /> { 函数体 } <br /> 返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际转载 2011-05-28 20:41:00 · 1238 阅读 · 0 评论 -
c++ 容器类 概括性介绍
<br />C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。<br />若需要存储的元素数在编译器间就可以确定,可以使用数组来存储,否则,就需要用到容器类了。 <br /><br />1、vector<br />连续存储结构,每个元素是在内存上是连续的;<br />支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下;<br />2、deque<br />连续存储结构,转载 2011-05-28 20:43:00 · 1189 阅读 · 0 评论 -
C/C++混合编程,实现C/C++间的函数相互调用详解
将 C++ 函数声明为``extern "C"''(在你的 C++ 代码里做这个声明),然后调用它(在你的 C 或者 C++ 代码里调用)。例如: // C++ code:extern "C" void f(int);void f(int i){ // ...} 然后,你可以这样使用 f(): /* C code: */void f(int);void cc(int i){ f(i); /* ... */ } 当然,这招只适用于非成员函数。如果你想要在 C 里调用成员转载 2011-05-27 16:42:00 · 3124 阅读 · 0 评论 -
VC多线程编程
<br />VC中多线程使用比较广泛而且实用,在网上看到的教程.感觉写的挺好. <br /> <br />一、问题的提出<br />编写一个耗时的单线程程序:<br /> 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: <br />void CSingleThreadDlg::OnSleepSixSecond() <br />{<b原创 2011-04-12 21:43:00 · 648 阅读 · 0 评论 -
C语言最好的10道题
<br />编者:对于大多数人,我们预期你可能答错 3) 4) 15)题,所以答错3道以内的,我们认为你很棒;答错5道题以内,我们认为你还不错(你还可能答错第9题) ;如果你有6道以上的题目不能答对,基本上我们都不好说什么了.... <br /><br />1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了 <br />2)数据类型 <br /> char 一个字节 1 byte <br /> int 两个字节 2 byte (16位系统,认为整型是2个字节) <br /> long in原创 2011-04-12 21:40:00 · 1105 阅读 · 0 评论 -
C++中的4种类型转换方式
<br />static_cast 静态的_cast <br />dynamic_cast 动态的_cast <br />reinterpret_cast 重新解释的 _cast <br />const_cast 常量的_cast<br />static_cast 静态的_cast <br />dynamic_cast 动态的_cast <br />reinterpret_cast 重新解释的 _cast <br />const_cast 常量的_cast<br /><br />C++ 里最好杜绝使用 C原创 2011-05-01 18:55:00 · 961 阅读 · 0 评论 -
虚继承与虚基类的详解
<br />虚继承和虚基类的定义是非常的简单的,同时也是非常容易判断一个继承是否是虚继承的,虽然这两个概念的定义是非常的简单明确的,但是在C++语言中虚继承作为一个比较生僻的但是又是绝对必要的组成部份而存在着,并且其行为和模型均表现出和一般的继承体系之间的巨大的差异(包括访问性能上的差异),现在我们就来彻底的从语言、模型、性能和应用等多个方面对虚继承和虚基类进行研究。<br />首先还是先给出虚继承和虚基类的定义。<br />虚继承:在继承定义中包含了virtual关键字的继承关系;<br />虚基类:在虚原创 2011-05-01 18:52:00 · 1221 阅读 · 0 评论 -
C语言实现的归并排序
<br />在Linux下实现了一个归并排序的算法,分成多个文件,这里记录三点:归并排序的算法、makefile的使用、gdb调试心得<br />一、归并排序算法<br />算法的递推关系:一个大的数列需要排序,把它从中间分成两部分,每一部分归并排序,然后把排好序的这两个部分再合并起来(合并的时候要按顺序合并)。<br />算法的Base Case:如果分成的这部分只有一个数,那么这个部分就不用再排序(看做已经排好序的)。<br />实现这个算法用了三个函数,每个函数在一个文件中,分别为:merge.c s原创 2011-05-09 20:19:00 · 2837 阅读 · 0 评论 -
十道海量数据处理面试题与十个方法大总结
作者:July、youwang、yanxionglu。时间:二零一一年三月二十六日说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。有任何问题,欢迎交流、指正。出处:http://blog.youkuaiyun.com/v_JUL转载 2011-09-07 09:57:21 · 594 阅读 · 0 评论 -
GNU c __attribute__详解
GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。原创 2015-01-22 20:16:08 · 2248 阅读 · 0 评论