<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[╰☆╮EvilCode的专栏╭☆╯]]></title><description><![CDATA[本博客仅用于暂存个人学习资料，不做他用，侵权请告知删除。]]></description><link>https://blog.youkuaiyun.com/evilcode</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; evilcode]]></copyright><item><title><![CDATA[C++实现回调函数的几种方式]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/134922203</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/134922203</guid><author>evilcode</author><pubDate>Mon, 11 Dec 2023 11:09:08 +0800</pubDate><description><![CDATA[这是最具C++特征的回调函数，基类定义纯虚函数，派生类实现虚函数，基类指针可以指向派生类，使用基类指针就可以调用派生类的虚函数，从而实现回调。关于新特性参考：C++ std::tr1::function和std::tr1::bind模板类介绍，qt测试，这里不多说，直接上代码。在C++的实际应用中，有很多实现回调函数的方式，不一定要传递函数指针才能实现回调，只要实现了回调的功能，都叫回调函数。C++11新特性td::tr1::function和std::tr1::bind实现回调函数。]]></description><category></category></item><item><title><![CDATA[一次内存紧缩]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/118684398</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/118684398</guid><author>evilcode</author><pubDate>Mon, 12 Jul 2021 21:28:17 +0800</pubDate><description><![CDATA[在linux系统下，一块内存被C的free函数或者C++的delete函数显式释放后，释放掉的内存不一定马上交还给系统。简单地说，系统通过动态分配给进程的内存分为两部分: mmap和brk. mmap在进程的虚拟地址空间中找出一块空闲区域分配给进程，释放后马上归还给系统; brk在进程数据段内找到一块空闲区域给系统，是通过push _edata栈顶指针实现。两种情况下都不会直接分配物理内存，只有在访问虚拟空间地址产生缺页中断的时候才会建立虚拟地址与内存地址间的映射。brk分配的内存在被释放后，如果堆栈高地址]]></description><category></category></item><item><title><![CDATA[Linux平台的ASLR机制]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/118684214</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/118684214</guid><author>evilcode</author><pubDate>Mon, 12 Jul 2021 21:19:44 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/Plus_RE/article/details/79199772
]]></description><category></category></item><item><title><![CDATA[Linux虚拟地址空间布局]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/118682662</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/118682662</guid><author>evilcode</author><pubDate>Mon, 12 Jul 2021 21:09:26 +0800</pubDate><description><![CDATA[转自：https://www.cnblogs.com/clover-toeic/p/3754433.html

  在多任务操作系统中，每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space)，在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3，而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内核使用那么多物理...]]></description><category></category></item><item><title><![CDATA[ARM交叉编译器GNUEABI、NONE-EABI、ARM-EABI、GNUEABIHF等的区别]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/110791638</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/110791638</guid><author>evilcode</author><pubDate>Mon, 07 Dec 2020 09:34:09 +0800</pubDate><description><![CDATA[命名规则:

交叉编译工具链的命名规则为：arch [-vendor] [-os] [-(gnu)eabi]

arch- 体系架构，如ARM，MIPS
	verdor - 工具链提供商
	os - 目标操作系统
	eabi - 嵌入式应用二进制接口
根据对操作系统的支持与否，ARM GCC可分为支持和不支持操作系统，如

arm-none-eabi：这个是没有操作系统的，自然不可能支持那些跟操作系统关系密切的函数，比如fork(2)。他使用的是newlib这个专用于嵌
   入式系统的C库。

...]]></description><category></category></item><item><title><![CDATA[socket--shutdown()]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/104946904</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/104946904</guid><author>evilcode</author><pubDate>Wed, 18 Mar 2020 16:07:26 +0800</pubDate><description><![CDATA[调用 close()/closesocket() 函数意味着完全断开连接，即不能发送数据也不能接收数据，这种“生硬”的方式有时候会显得不太“优雅”。


图1：close()/closesocket() 断开连接


上图演示了两台正在进行双向通信的主机。主机A发送完数据后，单方面调用close()/closesocket() 断开连接，之后主机A、B都不能再接受对方传输的数据。实际上，是完全无...]]></description><category></category></item><item><title><![CDATA[lcov收集覆盖率]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/104925116</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/104925116</guid><author>evilcode</author><pubDate>Tue, 17 Mar 2020 16:51:02 +0800</pubDate><description><![CDATA[1、gcov

1.1 什么是gcov

   首先我们要了解什么是gcov，gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参数生成二进制程序，执行测试用例生成代码覆盖率信息。

1.2 如何使用gcov

   用GCC编译的时候加上-fprofile-arcs -ftest-coverage选项，链接的时候也加上。
  ...]]></description><category></category></item><item><title><![CDATA[Cortex-M3和Cortex-M4 Fault异常应用之一 ----- 基础知识]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/103975683</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/103975683</guid><author>evilcode</author><pubDate>Tue, 14 Jan 2020 16:37:34 +0800</pubDate><description><![CDATA[1. 摘要 

Cortex-M内核实现了一个高效异常处理模块，可以捕获非法内存访问和数个程序错误条件。本应用笔记从程序员角度描述Cortex-M Fault异常，并且讲述在软件开发周期中的Fault用法。 

2. 简介 

Cortex-M3（以下简称CM3）和Cortex-M4（以下简称CM4）内核的Fault异常可以捕获非法内存方法和非法编程行为。Fault异...]]></description><category></category></item><item><title><![CDATA[linux下使用TC模拟弱网络环境(网络延迟和丢包)]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/102497022</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/102497022</guid><author>evilcode</author><pubDate>Fri, 11 Oct 2019 10:50:13 +0800</pubDate><description><![CDATA[1 模拟延迟传输简介
netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情 况。使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如 Fedora、Ubuntu、Redhat、OpenSuse、CentOS...]]></description><category></category></item><item><title><![CDATA[ubuntu使用Facebook的ATC模拟不同的网络类型]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/101283162</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/101283162</guid><author>evilcode</author><pubDate>Tue, 24 Sep 2019 14:34:19 +0800</pubDate><description><![CDATA[1 安装Ubuntu16系统

使用U盘安转Ubuntu 16 或者以上系统，该系统默认支持热点分享功能。安装教程：http://www.linuxidc.com/Linux/2016-04/130520.htm

2 创建无线热点

两种方式：

1. ubuntu利用系统自带的Wi-Fi热点GUI创建界面创建。

2. 其他linux系统如树莓派等使用命令行进行创建。

方式2请参考官方文档：...]]></description><category></category></item><item><title><![CDATA[WebSocket 是什么原理？为什么可以实现持久连接？]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/91046134</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/91046134</guid><author>evilcode</author><pubDate>Thu, 06 Jun 2019 16:30:40 +0800</pubDate><description><![CDATA[作者：Ovear
链接：https://www.zhihu.com/question/20215561/answer/40316953
来源：知乎
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。


一、WebSocket是HTML5出的东西（协议），也就是说HTTP协议没有变化，或者说没关系，但HTTP是不支持持久连接的（长连接，循环连接的不算）
首先HTTP有1.1和1...]]></description><category></category></item><item><title><![CDATA[c语言中#和##的用法]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/83012550</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/83012550</guid><author>evilcode</author><pubDate>Thu, 11 Oct 2018 15:57:38 +0800</pubDate><description><![CDATA[转：https://www.cnblogs.com/lanjianhappy/p/7857757.html

原文有些错误，修正一下。


一、一般用法 
我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 
用法: 


＃include&amp;lt;stdio.h&amp;gt; 
＃include&amp;lt;limits.h&amp;gt; 

#define STR(s)     #s 
#defin...]]></description><category></category></item><item><title><![CDATA[浅析C语言的一个关键字——register]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/82878674</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/82878674</guid><author>evilcode</author><pubDate>Fri, 28 Sep 2018 11:27:50 +0800</pubDate><description><![CDATA[--------------------- 本文来自 21aspnet 的优快云 博客 ，全文地址请点击：https://blog.youkuaiyun.com/21aspnet/article/details/257511?utm_source=copy

1、register修饰符暗示编译程序相应的变量将被频繁地使用，如果可能的话，应将其保存在CPU的寄存器中，以加快其存储速度。例如下面的内存块拷贝代码...]]></description><category></category></item><item><title><![CDATA[jiffies溢出与时间先后比较]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/82838796</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/82838796</guid><author>evilcode</author><pubDate>Tue, 25 Sep 2018 14:17:27 +0800</pubDate><description><![CDATA[转自：http://decimal.blog.51cto.com/1484476/410673

 

1. 概述
在Linux内核中，TCP/IP协议栈在很多用到时间比较的地方都使用了jiffies？本文介绍了什么是jiffies，jiffies溢出可能造成的问题，使用time_after等宏来正确地比较时间及其背后的原理。

2. jiffies简介

2.1 时钟中断
在Linux内核中，T...]]></description><category></category></item><item><title><![CDATA[Hex、bin、axf、elf格式文件小结]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/82384628</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/82384628</guid><author>evilcode</author><pubDate>Tue, 04 Sep 2018 15:39:49 +0800</pubDate><description><![CDATA[转：https://blog.youkuaiyun.com/grow_mature/article/details/8553542

一、HEX

Hex文件,一般是指Intel标准的十六进制文件。Intelhex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般编程器均支持生成此种格式文件。如，KEIL下可通过配置相关选项来生成HEX目标文件。



HEX文件由记...]]></description><category></category></item><item><title><![CDATA[压缩算法效率比较]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/81502904</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/81502904</guid><author>evilcode</author><pubDate>Wed, 08 Aug 2018 10:01:12 +0800</pubDate><description><![CDATA[Quick Benchmark: Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO比较了几种算法：

1. 压缩效率：LZO &amp;lt;GZIP &amp;lt; BZIP2 &amp;lt; LZMA

2. 压缩时间：GZIP &amp;lt;LZO ~= BZIP2 &amp;lt;&amp;lt; LZMA

3. 解压缩时间：LZO &amp;lt;GZIP &amp;lt; LZMA&amp;lt;&amp;lt; BZIP...]]></description><category></category></item><item><title><![CDATA[C和C++混合编译，extern"C"的用法]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/81068656</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/81068656</guid><author>evilcode</author><pubDate>Mon, 16 Jul 2018 17:28:31 +0800</pubDate><description><![CDATA[关于extern_C 
通常，在C语言的头文件中经常可以看到类似下面这种形式的代码


#ifdef  __cplusplus  
extern &quot;C&quot; {  
#endif  


/**** some declaration or so *****/  


#ifdef  __cplusplus  
}  
#endif  /* end of __cplusplus */  


那么，这种...]]></description><category></category></item><item><title><![CDATA[什么是BQB认证？]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/80858356</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/80858356</guid><author>evilcode</author><pubDate>Fri, 29 Jun 2018 16:11:18 +0800</pubDate><description><![CDATA[一、什么是BQB认证？什么是QDL（DID）列名认证？1、BQB认证：如果您的产品具有蓝牙功能并且在产品外观上标明蓝牙标志，必须通过一个叫做BQB的认证；发证机构：SIG2、QDL列名：蓝牙产品“最终产品列表”，原来称呼：EPL列名指蓝牙BQB认证的列名形式，例如蓝牙音箱成品，如果蓝牙模块已经过了BQB认证，那么蓝牙音箱这个产品可以不用重新申请BQB认证，只要取得模块供应商的授权，就可以把产品以列...]]></description><category></category></item><item><title><![CDATA[wifi一键配网smartconfig原理及应用]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/79376429</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/79376429</guid><author>evilcode</author><pubDate>Mon, 26 Feb 2018 13:58:16 +0800</pubDate><description><![CDATA[转载：http://blog.youkuaiyun.com/flyingcys/article/details/49283273智能家居/家电现阶段还处于普及阶段,由于家庭wifi网络的普及,目前普遍采用wifi与路由器完成连接,与手机/云端进行数据交互.智能硬件,如智能插座,智能空调,智能空气净化器由于不具备人机交互界面,不能像电脑一样的搜索/选择指定路由器,输入连接密码的界面,所以必须先解决正确连接路由问...]]></description><category></category></item><item><title><![CDATA[程序或-内存区域分配（五个段）]]></title><link>https://blog.youkuaiyun.com/evilcode/article/details/79189661</link><guid>https://blog.youkuaiyun.com/evilcode/article/details/79189661</guid><author>evilcode</author><pubDate>Sun, 28 Jan 2018 21:24:19 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/love_gaohz/article/details/41310597

一.

在学习之前我们先看看ELF文件。




ELF分为三种类型：.o 可重定位文件(relocalble file)，可执行文件以及共享库(shared library)，三种格式基本上从结构上是一样的，只是具体到每一个结构不同。下面我们就从整体上看看这]]></description><category></category></item></channel></rss>