
C++语言
Honkee
希望希望可以成真
展开
-
面试题:字符串的空格计数和单词计数
给定一个字符串,统计字符串中的空格数,和单词数原创 2014-07-01 23:40:07 · 1535 阅读 · 0 评论 -
C++的标准输入
从一个简单的问题谈起昨天做题的时候,遇到一个输入是这样的3 4aaaa aaaa aaaabbbbbbb bbbbccc cccccccc^D第一行输入一个整数n,表示接下来句子的数量,和另外一个整数(这里没有作用,只是用来说明下面的一个情况),接下来就是n个句子,每个句子以回车结束。 我的想法是int i, j;cin >> i >> j;while(i--){ string s;原创 2017-03-31 09:30:47 · 892 阅读 · 0 评论 -
Memcache源码阅读(8)---多线程
我看的源码版本是1.2.4前面已经将memcached的主要内容讨论完了。这里来说说memcached怎么使用多线程的吧。memcached的线程分为两种,一个主线程,另外的是工作线程。一个主线程负责接收用户的请求,接收到请求后将这个请求递交给多个工作线程的其中一个。每个工作线程都有一个连接队列管理着主线程递交的连接。线程初始化还是从线程的初始化开始。初始化一些锁,然后初始化工作线程,在主线程和工作原创 2016-12-25 21:06:49 · 594 阅读 · 0 评论 -
Memcache源码阅读(7)---用户输入的处理
我看的源码版本是1.2.4前面我已经说了数据存储,哈希表的管理,内存的管理。还有第二章说到用户的请求时如何到达memcached的,从用户的输入到memcached如何接受到这些输入。那现在我们来分析一下接收到这些输入后,memcached是怎么操作的。要看这部分代码就需要知道memcached有多少个命令。 我从process_command()这个函数里看到的命令有:get,bget,add,原创 2016-12-25 20:22:26 · 621 阅读 · 0 评论 -
Memcache源码阅读(5)---哈希表管理
我看的源码版本是1.2.4memcached使用的哈希函数是用Dr Dobbs的Hash方法,哈希函数的原理我就不说了,它可以将一个k个字节的数据通过转换,变为一个32位的二进制数。它有那样的特性,这k个字节的二进制稍微有一点变动,得到的32为二进制数就会有很大区别。这也就是哈希函数的作用。虽然说他哈希之后是32位,也就是可以分为2^32这么多个哈希桶,如果我们不需要这么大的哈希桶,可以对得到这32原创 2016-12-18 22:09:18 · 700 阅读 · 0 评论 -
Memcache源码阅读(4)---内存管理
我看的源码版本是1.2.4memcached的存储memcached拥有一个内存池,内存池中的内存分成多种大小的chunk,chunk的大小有一个基础大小(最小的chunk大小,base chunk size),然后后面大小的是以settings.factor为因子不断的增大。比如说base chunk size为64byte, setting.factor = 1.5,那么memcached拥有的原创 2016-12-18 15:06:35 · 939 阅读 · 0 评论 -
Memcache源码阅读(6)---数据存储
我看的源码版本是1.2.4前面第4篇讲到了memcached怎么去管理内存的,memcached将内存分为不同大小的chunk,不同大小的数据就放到能装下那个数据的最小chunk中。现在我来讲讲数据是以怎样的形式存储在内存中的。item的结构体#define ITEM_key(item) ((char*)&((item)->end[0])) //获得这个item的key#define ITEM_s原创 2016-12-21 20:02:08 · 958 阅读 · 0 评论 -
Memcache源码阅读(3)---处理用户输入
我看的源码版本是1.2.4从main函数开始,看看作者怎么初始化,然后再看作者怎么监听连接,怎么接受用户的输入,怎么处理用户的输入。主程序main函数里的一些操作自定义中断处理函数从命令行中获取用户打开memcached的指令值设置core文件初始化资源,统计资源,分配内存屏蔽SIGPIPE信号,因为SIGPIPE的默认处理是中断程序,客户端断开连接后,memcached再往客户端写数据就原创 2016-12-17 15:45:10 · 557 阅读 · 0 评论 -
Memcache源码阅读(2)---命令行使用
我看的源码版本是1.2.4使用方法编译安装,运行memcached➜ memcached-1.2.4 ./memcachedtelnet 到memcached监听的端口,通过命令行访问memcache➜ ~ telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.1原创 2016-12-17 15:44:21 · 689 阅读 · 0 评论 -
Memcache源码阅读(1)---看源码的心得
心得我这是第一次看源码。说不上什么心得,不过也总结一下~我觉得阅读一个项目的源码,应该是先知道这个项目具体怎么用之后,先估计一下作者的实现,然后再看源码来验证自己的想法。我这次阅读源码是在没有用过这个项目的前提下阅读的,一开始的时候不知道从何读起,于是就去网上找别人的博客,跟着别人的博文一篇一篇的看,然后自己对着源码看。慢慢的自己就开始知道要看什么了,就不再跟着别人的博文的步骤来,自己想知道那个功能原创 2016-12-17 15:43:18 · 1297 阅读 · 0 评论 -
动态链接与静态链接
静态链接静态链接是将程序需要调用到的符号(函数,变量)都拷贝到可执行文件。 链接器解析符号的时候是这么解释的:扫描一次传入链接器的文件(文件可以是目标文件,可以是归档文件,通过命令行的方式传入,从左到右扫描一遍)。扫描的时候修改三个集合(可重定位目标文件集合E,未解析的符号集合U,已定义的符号集合D)。扫描目标文件的时候,修改集合U和集合D,扫描归档文件就会尝试匹配U中的未定义符号,匹配成功修改U原创 2016-11-09 10:24:51 · 731 阅读 · 0 评论 -
多线程-生产者消费者模式(2)
多线程,生产者者消费者模式原创 2016-05-17 18:14:28 · 545 阅读 · 0 评论 -
多线程-生产者消费者模式(1)
多线程,生产消费者模式原创 2016-05-17 18:12:13 · 620 阅读 · 0 评论 -
cmake链接MySQL分析
下面这份代码,是我从网上找到的添加MySQL头文件和链接文件的CMake代码。# - Find mysqlclient# Find the native MySQL includes and library## MYSQL_INCLUDE_DIR - where to find mysql.h, etc.# MYSQL_LIBRARIES - List of libraries wh原创 2016-04-03 22:08:09 · 3568 阅读 · 0 评论 -
CMake学习笔记
由于在Linux下写程序的话,需要用到很多库,如果工程较大的话,编译命令可能会很长,将编译的工作交给CMake是一个比较好的选择。我在Linux下用CLion这个IDE,它用到的是CMake管理项目的编译工作。这些笔记是我看网上别人的笔记的时候记下来的。网上那篇笔记《CMake Practice》写得不错。cmake语法变量名大小写相关,文件名大小写也相关,指令大小写无关。指令和变量推荐使用大写。例原创 2016-04-03 22:05:46 · 719 阅读 · 0 评论 -
[caffe代码] LOG(xxx)日志记录的窥探
看caffe源代码可以知道很多C++方便的日志输出,在C++的语言设计中可能没有将这项功能设计到C++语言中,但是应该有好多第三方的库实现了这些功能,方便开发者的开发,调试。caffe是用了google提供的glog日志信息管理框架。 caffe的使用:covert_mist_data.cpp line84LOG(INFO) << "Opening leveldb " << db_path;这行日原创 2016-01-26 12:05:59 · 4741 阅读 · 0 评论 -
[caffe代码] convert_imageset.cpp
caffe利用了gtest单元测试框架,虽然对新手来说很难看懂,我也没有仔细去研究gtest的代码,就是大概知道它干什么罢了。主要功能convert_imageset的主要功能就是根据一个图片的(路径,类标)文件创建一个供caffe使用的数据库。使用方法convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME代码分析[FLAGS]那部分应该是一些参数原创 2016-01-23 21:58:29 · 2052 阅读 · 0 评论 -
关于程序编译后数据段、代码段、栈、堆的一些思考
昨天看《剑指Offer》这本书看到数据段,代码段,堆,栈的概念原创 2014-06-12 13:26:44 · 1509 阅读 · 0 评论 -
虚表指针的初始化时期
虚表指针是由构造函数初始化的。我这里只分析单一继承的情况,多重继承的情况我还没有弄明白。比如说我现在有两个类A,B, B继承A。如果我创建一个B对象,那么会先调用A的构造函数,再调用B的构造函数。在调用A的构造函数的时候,会将vptr指向A的虚表地址,调用B的构造函数的时候,再重新将vptr指向B的虚表地址。下面我用代码来证明。因为vptr的赋值会在我写的代码之前赋值好,所以我在A, B的构造函数里原创 2017-03-26 18:28:54 · 4805 阅读 · 4 评论