CL_XYZ
码龄9年
关注
提问 私信
  • 博客:81,180
    动态:24
    81,204
    总访问量
  • 40
    原创
  • 1,271,905
    排名
  • 19
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:吉林省
  • 加入CSDN时间: 2015-11-25
博客简介:

CL_XYZ

博客描述:
THE BEST OR NOTHING
查看详细资料
个人成就
  • 获得74次点赞
  • 内容获得25次评论
  • 获得206次收藏
创作历程
  • 41篇
    2019年
成就勋章
TA的专栏
  • 网络编程
    14篇
  • C++
    16篇
  • 面试题
    1篇
  • C++11多线程
    5篇
  • 备忘录
  • Linux
    6篇
  • redis
    1篇
  • 开源code
    2篇
  • 计算机系统
    1篇
  • GO
兴趣领域 设置
  • 人工智能
    caffe
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

342人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

条件控制,条件传送与__builtin_expect

如果我们现在要写一个函数,参数为两个整数,要求返回这两个整数差的绝对值,我们会有如下的写法。int diff(int a,int b){ if(a<b) return b-a; else return a-b;}现在给出另一种写法int diff(int a,int b){ int x1=a-b; int ...
原创
发布博客 2019.06.03 ·
1212 阅读 ·
5 点赞 ·
2 评论 ·
2 收藏

简单的TCP带宽测试工具TTCP

源码可以从陈硕的github上下载到,位置在muduo-master\examples\ace\ttcpTTCP是一个传统的测试TCP性能的工具,它主要测试两个机器之间TCP的吞吐量,在应用层模拟消息传递的过程——客户端发送一个包,服务端对包进行确认,并且在确认之前客户端不发送下一个包。可以设置发包的数量和每个包的大小,程序计算传输所有包所用的时间,然后计算出带宽。操作流程图以上发...
原创
发布博客 2019.05.07 ·
5727 阅读 ·
3 点赞 ·
1 评论 ·
8 收藏

剖析函数传递参数选择引用或值的区别

如果对ESP,EBP,栈帧等概念比较陌生,推荐先去了解一下函数调用的过程。推荐使用OD+VS自己实现一遍加深印象。(OD用来查看内存,VS用来看汇编代码和源代码的对应情况)mov与lea的区别指令:mov 操作对象:变量 有无[]没有区别,都是取值指令:mov 操作对象:寄存器 有[]表示取地址,没有[]表示取值指令:lea 操作对象:变量...
原创
发布博客 2019.05.04 ·
587 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C中的强符号与弱符号

作用域c语言的作用域有两种,代码块作用域和文件作用域。代码块作用域是指由花括号限定的作用域,花括号以外的作用域就是文件作用域。这里指的花括号可以是函数的花括号,if,while,for,namespace的花括号,遵循的基本规则是花括号以里可以看到本花括号以外的东西,但是相反则不可以。int main(){ int y=4; { int x=3; ...
原创
发布博客 2019.04.27 ·
950 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

LINUX中断的实现过程

大体分上半部和下半部上半部对时间要求很高要求迅速,下半部做具体工作下半部实现方式有软中断,tasklet,工作队列待填
原创
发布博客 2019.04.15 ·
570 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

再探C++中的常量

什么是常量?相信绝大多数写过程序的人见到这两个字的第一反应就是——不能更改的量。没问题,书本上这样告诉我们,编译器也这样告诉我们,好像常量就真的是那么简单,纯粹,让人心安理得的去使用它,不需要任何顾虑。但事实并没有想象中的那么单纯。1.常量并不一定是常量int main(){ const int x=3;}这是一个“假常量”,当我们在下边敲出 x=4; 这样的代码时,编译...
原创
发布博客 2019.04.10 ·
1390 阅读 ·
4 点赞 ·
0 评论 ·
3 收藏

从汇编语言角度辨析char*str="abc"和char str[]="abc"

所以说想要从根本上理解这种语言上的trick就要直接看他的汇编代码,对着经验和现象猜来猜去就如同盲人摸象。 char*str="abc";01092BFE mov dword ptr [str],109CC70h char strr[]="abc";01092C05 mov eax,dword ptr ds:[0109CC70h] ...
原创
发布博客 2019.04.10 ·
1798 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux内核计时器

linxu内核中完成的许多功能都需要感知时间的行进,比如定期把页面缓存中的数据写入磁盘,定期进行进程调度,提供获得当前时间的系统调用,还有计划任务的实现,让系统在某段时间之后执行某个程序,或者在某个时间点执行某个程序。以上这些功能对时间的把控都是由系统计时器完成的。 我们可以把系统计时器简单的看做一个按固定频率产生中断的硬件芯片,产生的中断就叫做定时器中断,而和时间相关的任务都在这个中断...
原创
发布博客 2019.04.09 ·
1013 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

使用CAS操作实现的无锁栈

CAS(compare and set),是原子数支持的一种操作,假如我们有一个原子数类,那么他其中的CAS函数大致可以理解为这样bool compare_and_set(T&a,T&b){ if(*this==a) { *this=b; return true; } else { a=...
原创
发布博客 2019.04.07 ·
645 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

C++11线程池

线程池其实就是把任务队列和工作线程绑到一起,提供一个向任务队列中添加任务的接口,下面的代码为了表达更加清楚没有分成头文件和源文件,仅仅是提供思路。同步机制利用的互斥锁+条件变量,也可以使用C++11提供的原子数封装的自旋锁+条件变量。两种组合的区别在于,自旋锁比较适合当任务比较简单的时候使用,可以减少陷入内核的次数,但当任务比较复杂,线程需要较长时间等待的时候,自旋锁会把大量时间浪费在忙等待上...
原创
发布博客 2019.04.05 ·
203 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

从汇编语言角度剖析右值引用和左值引用的本质

右值引用着实让人很挠头,而他又很重要,看多了“右值是短暂的,左值是持久的”这种正确但是让人摸不到头脑的话,我觉得很有必要从右值引用和左值引用实现的层面进行一次区分。首先明确一点,左值引用和右值引用,都是指针。其实说白了他们都是编译器给我们提供的“功能”,也就是说,编译器在我们看不到的地方做了很多别的事情,让一个指针的用法变得如此丰富多彩。但是不管多么丰富多彩,他也只是一个指针而已。先来...
原创
发布博客 2019.04.05 ·
1718 阅读 ·
9 点赞 ·
1 评论 ·
25 收藏

tinyhttpd源码剖析

这是一个简单的服务器程序,只有五百多行。每次来一个请求就开一个线程去处理它,可以解析POST,GET而且可以执行CGI程序。服务器程序想要把自己收到的参数传给某些别的程序去执行,并且把这些程序产生的输出拿走,发给某个目标对象。CGI所处的位置就在“服务器把收到的参数传给别的程序”这个环节。它规定了一个标准的借口,我们只需要调用setenv()把收到的东西设置成条件变量,然后再通过execl执行...
原创
发布博客 2019.04.04 ·
770 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

shared_from_this的使用

当你想使用一个类的某个成员函数返回指向这个类的指针的时候,可以这样写class A{public: A(int y=0):x(y){ } A* getthis() { return this; } int x;};int main (void) { A a; cout<<a.x<<endl; A*p=a.getthis(); p->...
原创
发布博客 2019.04.04 ·
6867 阅读 ·
6 点赞 ·
0 评论 ·
23 收藏

auto_ptr和unique_ptr

auto_ptr是老版本的智能指针,当时还没有unique_ptr,shared_ptr,weak_ptr,现在auto_ptr已经被废弃,他有了更好用的替代品unique_ptr,相对于他的后继者,它有以下几个缺点。1.auto_ptr可以进行赋值和拷贝运算,但是他虽然名义上做的是赋值和拷贝,但是背后做的却是move语义做的事情,拷贝和赋值之后,源对象被置位空,这看起来十分反常。而uniqu...
原创
发布博客 2019.04.04 ·
847 阅读 ·
1 点赞 ·
0 评论 ·
6 收藏

C++智能指针自定义删除器

智能指针支持用户自定义删除方法,默认为delete或者delete[],不过当我们用一个裸指针定义一个智能指针,而裸指针指向的内存是malloc出来的时候,显然用delete删除会出问题,比如。struct A{ int a,b; int*p; A() { p=(int*)malloc(sizeof(int)); } ~A() { free(p); }};int...
原创
发布博客 2019.04.04 ·
2885 阅读 ·
1 点赞 ·
4 评论 ·
5 收藏

C++中的using关键字

罗列一下using的几种用法1.using namespace 这是最常见的用法,C++用命名空间把各种函数名字变量名字类名字保护起来。2.在子类里使用父类的private成员class A{public: int v;};class B: A{public: using A::v; void fun() { cout<<v<<end...
原创
发布博客 2019.04.03 ·
2998 阅读 ·
8 点赞 ·
1 评论 ·
9 收藏

epoll详解

IO复用函数统共有三个,select,poll,epoll,但是在大并发条件下,我们一般都会使用epoll,select和poll有下边两个缺点。每次在调用之前都要把所有需要监控的socket都传给内核 无论是在内核还是在用户空间select和poll都是采用轮询的方式检查所有socket而epoll正是在这两点上做出了改进,得到了比select和poll更高的效率。epoll的原理...
原创
发布博客 2019.04.03 ·
672 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

linux中的动态链接库

在使用动态链接库的时候并不会把动态库的代码全部copy到生成的程序中,而是在程序运行的时候再去加载对应的代码,所以使用同一个动态库的程序可以共用一份代码,而且当你对动态库进行升级的时候,也不用去修改使用它的代码。以上是动态库生成使用的全过程,可是当运行的时候却出现了这种错误。用ldd命令再看一下怎么会找不到,编译的时候不是加进去了吗,而且编译的时候也没有报错。因为程序编译的...
原创
发布博客 2019.04.03 ·
16463 阅读 ·
11 点赞 ·
1 评论 ·
53 收藏
加载更多