陈松的技术博客

阅读使人充实,会谈使人敏捷,写作使人精确

无锁循环队列的应用

循环链表结构

前言 为充分利用向量空间,克服”假溢出”现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。 正文 一, 无锁循环队列的条件处理 循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。 因此,无法...

C++中的RAII机制运用

左值引用, 右值引用, 移动语义, 完美转发和RAII机制运用

前言 什么是RAII? RAII(Resource Acquisition Is Initialization),也称直译为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的机制。 C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。 RAII 机制就是利用了C++的上述特性,在需要获取使用资源RES的时候,构造一个临时对象(T),在其构造T时获...

2,程序的机器级表示

C/C++的背后的原理

前言 C/C++程序在编译后指令 正文 一, 编译使用命令 1, 汇编命令 gcc -Og -S main.c O0选项不进行任何优化,在这种情况下,编译器尽量的缩短编译消耗(时间,空间),此时,debug会产出和程序预期的结果。当程序运行被断点打断,此时程序内的各种声明是独立的,我们可以任意的给变量赋值,或者在函数体内把程序计数器指到其他语句,以及从源程...

1,信息的表示和处理

C/C++的中数据类型

前言 数据类型 字节的使用 正文 一,布尔代数表示 1, 位运算 a = [0110], b = [1100] 1.1 & 0110 &1100 0100 1.2 | 0110 |1100 1110 1.3 ^ 0110 ^1100 1010 1.4 ~ ~1100 0011 2, 分配侓 ...

网络协议详解

ARP协议,DNS协议,IP协议,TCP协议,IP路由和TCP状态转换图

前言 网络通信一直都是所有的框架的基础 正文 一, 基础复习 1, 实际开发四层模型 ① , 封装   经过TCP封装后的数据称为TCP报文段,TCP协议为通讯双方维持一个连接,并且在内核中存储相关数据。这部分数据中的TCP头部信息和TCP内核缓冲区(发送缓冲区或者接受缓冲区)数据一起构成了TCP报文段。   当发送端应用程序使用send(或者write)函数向...

mp4文件的分析

视频格式的分析

前言 mp4 就是一个一个box包 正文 一, mp4格式分析 MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在“ISO/IEC 14496-14”标准文件中定义的,属于MPEG-4的一部分,是“ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)”标准中所定义的媒体格式的一种实现,后者定义了...

进程之间的通信(本地通信)

管道, 同享内存(mmap), socket

前言 父子进程之间的通信的有五种 管道进程的pipe函数和dup2函数组合使用父子进程间通信 管道 mkfifio函数的使用 mmap内存映射的机制 socketpair函数的父子进程描述符传递 socket本地通信 正文 #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #defi...

linux网络编程(epoll反应堆)

反应堆的使用

前言 对于epoll封装高并发服务器模式使用 正文 一,epoll反应堆 调用过程 二,epoll编程 /************************************************************************* > File Name: server_epoll_btree.c > Author: songli &g...

Linux网络编程(epoll的边缘触发和水平触发)多路IO高并发服务器

epoll的两种模式-LT模式和高速度ET模式

前言 epoll是linux服务器中使用 在android系统中使用进程保护机制 任务队列的使用 正文 一,epoll函数 1, fcntl的介绍 fcntl函数可以改变已经打开的文件的性质 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* a...

Linux网络编程之IO复用(select函数的使用)

select函数的使用-文件描述符集合的位图

前言 select 函数是控制 文件描述符集合的位图 正文 fd_set 文件描述符集合 位图 struct timeval { long tv_sec; /* seconds */ long tv_usec; /* microseconds */ }; in...