自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 论坛 (1)
  • 问答 (16)
  • 收藏
  • 关注

原创 如何写出让 CPU 跑得更快的代码?

希望大家多支持原创,改文章转载自:https://www.cnblogs.com/xiaolincoding/p/13836230.html前言代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能。CPU 内部嵌入了 CPU Cache(高速缓存),它的存储容量很小,但是离 CPU 核心很近,所以缓存的读写速度是极快的,那么如果 CPU 运算时,直接从 CPU Cache 读取数据,而不

2020-11-12 11:46:08 21

原创 树莓派搭建kodexplorer

可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox、SkyDrive,seafile等。将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储、管理家庭成员的各种照片,音乐,文档等各种文件,树莓派在家庭局域网中,可以保证上传和下载的速度,还支持在线播放网盘中的视频文件,同时,由于文件全部储存在树莓派中,可以保证数据的安全。这套源码试用于个人网盘,家庭私有云,企业私有云。一,更新树莓派系统sudo apt-get updatesudo apt-get

2020-10-24 16:17:24 106

原创 WireShark之Lua插件

在ICT(ICT,information and communications technology)人员用于网络分析的兵器库中,wireshark无疑是倚天剑,虽历史悠久,其锋利程度丝毫不减,由于开源,便于用户二次开发,这就使得此剑的颜值、功能都近乎完美。如果能够熟练的使用此剑,对于行走江湖也是百利而无一害。对于当下的主流协议wireshark都有自带解析插件,如IP、ARP、TCP、UDP、HTTP、DHCP等。但是实际应用中,这些协议通常只是我们传输数据过程的载体,有不少软件之间的通信协议都是私有

2020-06-08 21:44:17 225

原创 C/C++柔型数组

1、什么是柔性数组?柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度,所以我们可以用结构体来创建柔性数组。2、柔性数组有什么用途 ?它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。3、用法:在一个结构体的最后,申明一个长度为空的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数...

2020-04-27 22:13:54 85

原创 栈回溯

首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x86体系的CPU而言,其中:---> 寄存器ebp(base pointer )可称为“帧指针”或“基址指针”,其实语意是相同的。---> 寄存器esp(stack pointer)可称为“ 栈指针”。要知...

2020-01-19 14:45:52 631

原创 Markdown Emoji表情

Markdown里面可以使用一些Emoji表情,可以极大的增加写博客的趣味性。Markdown全部表情请参照这里:https://www.webfx.com/tools/emoji-cheat-sheet/注:Emoji使用规则,双::中间加单词即可。Markdown表情语法:效果文本????:frog :????:pig :????:sweat :????:smirk :????:shit :????:flushed :???

2020-11-28 14:27:09 29

原创 Linux---内核链表

大多数人在学习数据结构的时候,链表都是第一个接触的内容,笔者也不列外,虽然自己实现过几种链表,但是在实际工作中,还是Linux内核的链表最为常用(同时笔者也建议大家使用内核链表,因为会了这个,其他的都会了),故总结一篇Linux内核链表的文章。文章URL:https://www.cnblogs.com/yangguang-it/p/11667772.html注:Linux内核的链表几乎可以覆盖所有跟链表相关的操作,而且这里面还会涉及到一些kernel编程的小技巧。...

2020-11-22 16:44:58 7

原创 git pull、git fetch以及pull request的区别

pull 根据不同的配置,可等于 fetch + merge 或 fetch + rebase。具体了解可继续读下去。要理解它们的区别,首先我们需要明白的git的架构,它是分布式的版本管理系统。我画了张图,不仅仅涉及到git fetch和git pull,对整体理解也会很有帮助。如下:上图展示了git的整体架构,以及和各部分相关的主要命令。先说明下其中涉及的各部分。工作区(working directory),简言之就是你工作的区域。对于git而言,就是的本地工作目录。工作区的内容会包含提交

2020-11-03 17:02:57 31

原创 C语言宏定义的几个坑和特殊用法

由于本文主要参考GCC文档,某些细节(如宏参数中的空格是否处理之类)在别的编译器可能有细微差别,请参考相应文档。宏基础宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见。基本用法如下:标示符别名#define BUFFER_SIZE 1024预处理阶段,foo = (char *) malloc (BUFFER_SIZE);会被替换成foo = (char *) malloc (1024);宏体换行需要在行末加反斜杠\#define NUMBERS 1, \

2020-10-27 14:18:36 62

原创 Markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2020-10-24 18:01:44 19

原创 嵌入式C语言

怎么做好嵌入式?相信这个问题无论问谁你都会得到一句学好C语言!今天推荐一篇大佬写的嵌入式C语言知识点总结,非常值得一读。从语法上来说C语言并不复杂, 但编写优质可靠的嵌入式C程序并非易事,不仅需要熟知硬件特性和缺陷,还需要对编译原理和计算机技术知识有着一定的了解。本文以嵌入式实践为基础,再结合相关资料, 阐述嵌入式需要了解的C语言知识和重点,希望每个读到这篇文章的人都能有所收获。1 关键字关键字是C语言中具有特殊功能的保留标示符,按照功能可分为1).数据类型(常用char, short.

2020-09-08 09:06:24 38

原创 Linux下signal信号汇总

signal信号SIGHUP 1 /* Hangup (POSIX). */ 终止进程 终端线路挂断SIGINT 2 /* Interrupt (ANSI). */ 终止进程 中断进程 Ctrl+CSIGQUIT 3 /* Quit (POSIX). */

2020-08-15 18:49:38 86

原创 路由器与交换机

在工作中,不管是办公上网还是设备调试,经常都会用到路由器与交换机,那他们二者的区别是什么呢?笔者之前也没太高明白...恰好出差周末闲来无事,特来梳理一下并共享,希望对那些跟我一样对此有困惑的人有所帮助,废话不多说,请见下文所述:路由器负责将局域网连接到广域网和互联网中,在路由器中记录着路由表,它会根据路由表找到网络中数据传输最合适的路径。大家通过同一个路由器上网共用一个宽带,上网要相互影响,发生在网络层。 交换机可以为接入交换机的任意两个网络节点提供独享的电信号通路,把传输的信息送到符合要求的相应路由上

2020-08-02 23:50:04 46

原创 Linux僵尸进程

在UNIX系统中,一个进程结束了,但是其父进程没有等待(调用wait/waitpid)它,那么它将变成一个僵尸进程。通过PS命令可以查看其带有defunct的标志,僵尸进程是一个早已死亡的进程,但在进程表中仍占据一个位置;但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进...

2020-05-02 18:54:56 82

原创 volatile关键字

面试中常常会问道,说说你对volatile的理解?上图中每个线程都有自己的工作内存,还有一个共享的主内存。当这两个线程需要读取变量data的值的时候,他们需要先从主内存将data变量的值加载到自己的工作内存,才可以使用这个值。这个工作内存类似于一个高速的本地缓存,线程在代码的执行过程中,可以直接从自己本地缓存里加载变量副本,不需要要从主内存加载变量值,性能会得到极大的提升。我...

2020-04-28 22:08:09 64

原创 如何编译和运行C++程序

C++和C语言类似,也要经过编译和链接后才能运行。在《C语言编译器》专题中我们讲到了 VS、Dev C++、VC 6.0、Code::Blocks、C-Free、GCC、Xcode 等常见 IDE 或编译器,它们除了可以运行C语言程序,还可以运行 C++ 程序,步骤是一样的,这里不再赘述,读者需要留意的是 C++ 源文件的后缀,以及 GCC 中的g++命令。下图是 C/C++ 代码生成可执行文...

2020-04-19 15:02:46 271

转载 Linux 的启动流程

那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所以,这个部分与程序员的关系更密切。我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统。下面的内...

2020-04-12 17:16:48 45

原创 计算机启动过程

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,"启动"用英语怎么说?回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩...

2020-04-12 16:53:59 100

原创 Linux C线程池

大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服...

2020-04-12 15:17:13 40

原创 内网IP与公网IP

内网IP:由图可以看到路由器(第一层),交换机(第二层)然后是自己的电脑,所谓的内网就是从路由器以下开始的。我们内网用户的电脑都是经过交换机和路由器之后才能连到外网。路由器只需一个公网IP就可以供下面多个电脑联网使用。由于不同的内网IP能够重复使用。所以内网IP通常有以下类型:10.0.0.0~10.255.255.255172.16.0.0~172.31.255.25519...

2020-04-07 15:17:31 159

原创 Redis 持久化之RDB和AOF

Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果你想快速了解和使用RDB和AOF,可以直接跳到文章底部看总结。本章节通过配置文件,触发快照的方式,恢复数据的操作,命令操作演示,优缺点来学习 Redis 的重点知识持久化。RDB 详解RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,...

2020-04-04 14:19:55 49

原创 Python中import的as

在Python中,如果import的语句比较长,导致后续引用不方便,可以使用as语法,比如:import dir1.dir2.mod# 那么,后续对mod的引用,都必须是dir1.dir2.moddir1.dir2.mod.X那么,为了简化输入,可以使用as语法:import dir1.dir2.mod as m# 那么,后续对mod的引用,可以直接使用mm. ...

2020-03-20 14:11:32 148

原创 RamDisk

内存的传输率目前在Gbyte/s级别,是Mbyte/s级别的固态硬盘和机械硬盘无法比拟的。如何在Linux系统中使用部分内存资源创建虚拟的硬盘,并将频繁读取写入的缓存数据映射到内存硬盘中,保护物理硬盘寿命,加速系统响应。1 什么是RamDiskRam:内存,Disk:磁盘,在Linux中可以将一部分内存当作分区来使用,称之为RamDisk。对于一些经常被访问、并且不会被更改的文件,可以将它...

2020-03-12 15:21:56 407

原创 FTP与SFTP

什么是SFTP?SFTP是一种安全的文件传输协议,一种通过网络传输文件的安全方法;它确保使用私有和安全的数据流来安全地传输数据。SFTP要求客户端用户必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH)进行,即不传输明文密码或文件数据。它允许对远程文件执行各种操作,有点像远程文件系统协议。SFTP允许从暂停传输,目录列表和远程文件删除等操作中恢复。SFTP和FTP之间的区别...

2020-03-06 23:25:33 102

原创 程序的连接之符号和符号表

程序的链接中,链接的第一步就是符号的解析。要理解符号的解析过程,得先搞明白以下几点:什么是符号 什么是符号的定义,什么是符号的引用 链接符号的类型有哪些,各自有什么特点 符号表的结构 链接器对符号的解析规则下面就来一步步搞明白这些点。符号就是其实程序中的变量名、函数名。符号的定义和引用,可见下图:image.png注意:局部变量temp分配在栈中...

2020-02-24 17:03:17 350

原创 交叉编译GDB工具链

1. 交叉编译交叉编译是指在一种平台上编译出运行于另一种平台的程序。这里的平台,涉及硬件和软件两个部分,硬件平台指 CPU 架构,软件平台指操作系统。交叉编译主要针对嵌入式领域,因为嵌入式系统资源受限,没有办法在嵌入式平台上运行一套编译环境,因此需要在其他性能更强劲的平台上借助交叉编译工具链来制作可在嵌入式平台上运行的程序。交叉编译与普通编译基本步骤一样:[1] configure在...

2020-02-19 13:29:38 320

原创 Linux编程之select

select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。select 机制的优势为什么会出现select模型?先看一下下面的这句代码:int iResult = recv(s, buffer,1024);这是用来接收数据的,在默认的阻塞模式下的套接字里,recv会阻塞在那里,直到套接字连接上有数据可读,把数据读到buffer里后re...

2020-01-31 22:50:59 88

原创 Linux可执行文件的格式ELF

在Linux中,可执行文件的格式是ELF格式,而有一些命令可以帮助我们了解它们更多的“秘密”,以此来帮助我们解决问题。示例程序我们的示例程序如下://hello.c#include<stdio.h>int main(int argc,char *argv[]){ printf("hello shouwangxiansheng\n"); return ...

2020-01-19 14:35:30 140

原创 字符编码

字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最...

2018-10-29 13:52:27 105

原创 Source Insight工程,相对路径配置

Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。在创建Source Insight工程时,我们最好采用“相对路径”,并将Source Insight的工程文件,保存到源码包里(注:Source Insight工程最好单独创建一个文件夹,保证

2017-08-25 17:07:59 710

原创 程序执行的时间计算

获取程序执行的时间粒度。 直接上代码。 #include<stdio.h> #include<process.h> #include<time.h>//time.h头文件 int main() { float a=3; int i, begin, end;//定义开始和结束标志位 begin=clock();//开始计时 for(

2016-06-25 22:10:32 190

C语言深度解剖-带书签(非印刷版).pdf

《C语言深度解剖(第2版):解开程序员面试笔试的秘密》由作者结合自身多年嵌入式C语言开发经验和平时讲解C语言的心得体会整理而成,其中有很多作者独特的见解或看法。由于并不是从头到尾讲解C语言的基础知识,所以本书并不适用于C语言零基础的读者,其内容要比一般的C语言图书深得多、细致得多,其中有很多问题是各大公司的面试或笔试题。第2版中新增加了部分编程规范的内容。 本书适合广大计算机系学生、初级程序员参考学习,也适合计算机系教师、中高级程序员参考使用。

2018-08-15

寄存器中断

发表于 2015-09-13 最后回复 2015-09-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除