<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Steve Ellison]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/breadheart</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; breadheart]]></copyright><item><title><![CDATA[ldconfig用法]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/117419418</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/117419418</guid><author>breadheart</author><pubDate>Mon, 31 May 2021 16:14:58 +0800</pubDate><description><![CDATA[ldconfig 
参考：http://man.linuxde.net/ldconfig  https://blog.youkuaiyun.com/chenzixun0/article/details/56278632  主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下，搜索出可共享的动...]]></description><category></category></item><item><title><![CDATA[简单明了的区分C++ C语言中声明(declaration)、定义(definition)、签名(signature)的区别]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/115463603</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/115463603</guid><author>breadheart</author><pubDate>Tue, 06 Apr 2021 16:20:22 +0800</pubDate><description><![CDATA[何为声明（declaration）？

告诉编译器某个东西的类型和名称，即不提供存储的位置和具体实现的细节。

extern itn x;                   // 变量声明
std::size_t func(int num);      // 函数声明
class Widget;                   // 类声明

template&lt;typename T&gt;            // 模板声明
class Student;



何为定义（definitio..]]></description><category></category></item><item><title><![CDATA[C语言中Static关键字的用法]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/115463484</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/115463484</guid><author>breadheart</author><pubDate>Tue, 06 Apr 2021 16:16:28 +0800</pubDate><description><![CDATA[static 关键字
static 修饰的全局变量和函数只能在本模块中使用，不能在其它的模块中使用。因此，当一个函数或变量只能在本模块中使用时，不能用 extern “C” 关键字修饰，用在其它的文件中调用。
当同时编译多个文件时，所有未加static前缀的全局变量和函数都具有全局可见性。其它的文件中可以调用该函数和变量。加了static关键字后，相当于做一个隐藏的作用，只对当前调用的文件有效。利用这一特性可以在不同的文件中定义同名函数和同名变量，而不必担心命名冲突。


比如 a.c 文件中定义了一个全局]]></description><category></category></item><item><title><![CDATA[最简单易懂的方式来介绍什么回调函数（Callbacks）]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/115450181</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/115450181</guid><author>breadheart</author><pubDate>Mon, 05 Apr 2021 22:49:51 +0800</pubDate><description><![CDATA[文章目录1. Callback(回调函数)1.1. 什么是回调函数？1.2. 分类1.3. 用途1.4. 为什么要使用回调函数？1.5. 代码实现
1. Callback(回调函数)
1.1. 什么是回调函数？

将函数指针作为一个参数传递给另一个函数。
把函数的指针（地址）作为另一个函数参数的入口地址传递，当这个指针被用来调用其所指向的函数时，我们就说这是回调函数。

1.2. 分类
根据回调函数在运行时控制数据流的方式不同，可以为两种类型的回调函数。


阻塞回调(Blocking callbacks)]]></description><category></category></item><item><title><![CDATA[简单讲解C语言中为什么要使用字节对齐]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/115445979</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/115445979</guid><author>breadheart</author><pubDate>Mon, 05 Apr 2021 18:31:17 +0800</pubDate><description><![CDATA[结构体填充与数据对齐

结构变量的大小等于它包含所有变量的总大小。
结构体填充：是编译器用来对齐内存偏移数据。
字段填充：为了提高性能，编译器在结构体中利用 结构体填充 方法进行数据对齐。
数据对齐：当CPU读写内存时，它都在小块内（字长或4个字节）进行。这种安排增加了系统的性能，有效地将数据存放在字长整数倍的偏移地址。

结构体中每个数据类型都要对齐
联合体中按照最大长度的数据类型对齐
按照基本数据类型对齐



为什么要字节对齐？
现代计算机中内存的存储理论上都是按照 byte 大小来存储的，但实际上是]]></description><category></category></item><item><title><![CDATA[最简单的方式理解函数指针与指针函数]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/115443846</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/115443846</guid><author>breadheart</author><pubDate>Mon, 05 Apr 2021 16:15:30 +0800</pubDate><description><![CDATA[文章目录1. 指针函数1.1. 定义1.2. 格式1.3. 代码实现2. 函数指针2.1. 什么是函数指针？2.2. 函数指针定义格式2.3. 特点2.4. 使用步骤2.5. 代码实现2.6. 常见的函数指针声明2.7. 为什么使用函数指针：2.8. 其它指针声明2.9.  []、()、* 优先级比较 2.10. 函数指针数组
1. 指针函数
1.1. 定义
指针函数是返回结果的类型为指针的一个函数。其本质是一个函数，与普通函数的区别是，指针函数的返回值是一个指针，函数返回的数据是一个地址。
1.2. 格式]]></description><category></category></item><item><title><![CDATA[C语言中volatile关键字用法]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/114450275</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/114450275</guid><author>breadheart</author><pubDate>Sat, 06 Mar 2021 18:14:03 +0800</pubDate><description><![CDATA[1.1. 编译器的优化介绍
介绍Volatile关键字之前我们先了解一下编译器的优化。

高速缓存：处理器读取程序里面的数据时，把一些访问频率比较高的数据，临时存储到寄存器(register)中，当需要取数据时，就会从 register 中取，而不是直接去从 memory(内存)中取，节约了时间，像这样的过程，叫做高速缓存。



硬件级别的优化：内存访问速度远不及CPU处理速度，为提高机器整体性能，在硬件上引入硬件高速缓存(Cache)，加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执]]></description><category></category></item><item><title><![CDATA[C、C++中++i与i++的区别]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/114132861</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/114132861</guid><author>breadheart</author><pubDate>Fri, 26 Feb 2021 15:41:58 +0800</pubDate><description><![CDATA[C++中使用++i与i++两者的效率有何区别？

i++ 表示先引用，后自增。 ++i 返回的是对象的引用（reference of object），而 i++ 返回的是对象的原值（origin of object，但非左值）。
++i 先自增，后返回原对象的对象，没有产生任何临时对象；而 i++，先保存原对象，然后自增，最后返回该原对象的临时对象，需要创建和销毁对象。
对于C++内置类型，两者的效率差别不大；对于自定义的类而言，++i 的效率更高一些。

C语言中没有面向对象，两者的使用效率是一样的，只不]]></description><category></category></item><item><title><![CDATA[*p++操作执行的过程]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/114121855</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/114121855</guid><author>breadheart</author><pubDate>Fri, 26 Feb 2021 11:48:06 +0800</pubDate><description><![CDATA[在项目中遇见了 *p++ 这种操作，但不明白在 *p++中 ++ 和 * 是怎样执行的？现在我们来一一剖析它的运算过程。


C语言中取值运算符 * 与前置自增运算符++、后置自增运算符++都属于单目运算符，运算符的优先级顺序同为第2级，结合方向为 右到左。其中，* 使用形式为：*p，用于指针变量，前置自增使用形式为 ++i，后置自增使用形式为 ++i。


注意

同一优先级的运算符，运算次序由结合方向所决定。
简单记就是：！ &gt; 算术运算符 &gt; 关系运算符 &gt; &amp;&amp; &]]></description><category></category></item><item><title><![CDATA[Linux中find与grep的用法介绍]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/113482553</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/113482553</guid><author>breadheart</author><pubDate>Sun, 31 Jan 2021 18:25:02 +0800</pubDate><description><![CDATA[find：按照文件属性查找

选项参数

-name: 例子：find /usr/src -name filename.txt
-type: 例子：find /usr/src -type filename.txt

类型包括：f(file), d(directory), l(link), c(char), d(device), s(socket), b(block)


-size: 默认单位为512byte，一个扇区的大小

例子：find /usr/src -size +10M -size -20M 查]]></description><category></category></item><item><title><![CDATA[深入理解C语言中的结构体]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/113482346</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/113482346</guid><author>breadheart</author><pubDate>Sun, 31 Jan 2021 18:00:18 +0800</pubDate><description><![CDATA[结构体定义（3种）

声明结构体包括两步

定义结构体
声明相应结构体类型的变量（结构体能包含C语言允许的所有类型变量）


法一：在定义结构体类型的同时说明结构体变量

struct 结构体标识符
{
    成员变量列表;
}变量名列表;


法二:直接说明结构体变量

struct
{
    成员变量列表;
}变量名列表;


法三：先定义结构体，再说明结构体变量

struct 结构体标识符
{
    成员变量列表;
};
struct 结构体标识符 变量名列表;

调用结构体：

普通结构体
]]></description><category></category></item><item><title><![CDATA[字(word)、字节(byte)、半字(half-word)的理解]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/113482110</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/113482110</guid><author>breadheart</author><pubDate>Sun, 31 Jan 2021 17:47:58 +0800</pubDate><description><![CDATA[概念


字定义：总线是一般设计用来传输固定大小的数据，这块数据被称为字（word）。一个字包含的字节数(即字的大小)是各种计算机系统里面的基本参数，而且这个参数在不同的操作系统里通常是不同的。


CPU按照其处理信息的字长可以分为：8位微处理器、16位微处理器、32位微处理器以及64位微处理器


CPU最大能查找多大范围的地址叫做寻址能力，CPU的寻址能力以字节为单位，如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G，这也是为什么32位的CPU最大能搭配4G内存的原因，再多的话CPU就找不]]></description><category></category></item><item><title><![CDATA[C语言中extern和extern “C“关键字的用法]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/113482016</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/113482016</guid><author>breadheart</author><pubDate>Sun, 31 Jan 2021 17:39:32 +0800</pubDate><description><![CDATA[extern和extern "C"关键字


C/C++中使用 extern 声明的变量或函数，它们的作用域是全局的，告诉编译器使用该关键字声明的变量可以在本模块或其他模块中使用。只是 声明(declaration) 了变量，但是并没有 定义(definition) 该变量，需要在具体使用的地方去定义该变量。
// 在某个.h 文件中声明了变量
extern int a;

// 在某个具体的.c或.cpp文件中使用
int a = 100;



extern "C" 的作用是为了能够正确在 C++ 代码]]></description><category></category></item><item><title><![CDATA[设计模式：Observer观察者模式剖析]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/112854639</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/112854639</guid><author>breadheart</author><pubDate>Tue, 19 Jan 2021 23:25:31 +0800</pubDate><description><![CDATA[1. 什么是Observer？


定义对象之间的一种一对多的依赖关系，以便每当一个对象状态发生改变时，所有依赖于它的对象都得到通知并自动刷新。观察者模式也叫发布-订阅（Publish/Subscribe）模式、模型-视图（Model/View）模式、源-监听器（Source/Listener）模式或从属者（Dependents）模式。观察者模式是一种对象行为型模式。


在观察者模式中，发生改变的对象称为观察目标(Subject)，而被通知的对象称为观察者(Observer)，一个 Subject 可以对]]></description><category></category></item><item><title><![CDATA[剑指offer第11题：旋转数组的最小数字]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/112645235</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/112645235</guid><author>breadheart</author><pubDate>Thu, 14 Jan 2021 23:53:27 +0800</pubDate><description><![CDATA[第11题：旋转数组的最小数字

题目描述：把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转，输出旋转数组的最小元素。NOTE：给出的所有元素都大于0，若数组大小为0，请返回0。
示例1：输入 [3,4,5,1,2]，返回值为 1

思路
最直观的解法

从头到尾遍历一遍数组，就能找出最小的元素，这种思路的时间复杂度是 O(n)\Omicron(n)O(n)，这种思路，显然没有利用输入的旋转数组的特性，肯定达不到面试官的要求。

利用二分法查找的思想实现。.]]></description><category></category></item><item><title><![CDATA[剑指offer第40题：最小的K个数]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/112597238</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/112597238</guid><author>breadheart</author><pubDate>Wed, 13 Jan 2021 23:39:54 +0800</pubDate><description><![CDATA[第29题：最小的K个数
题目描述：输入n个整数，找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4。
示例1
输入：[4,5,1,6,2,7,3,8],4

返回值：[1,2,3,4]

实现思路
方法一：直接采用排序的方式，调用STL中sort 方法
class Solution {
public:
    vector&lt;int&gt; GetLeastNumbers_Solution(vector&lt;int&gt; input, int k]]></description><category></category></item><item><title><![CDATA[C++11中override关键字使用]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/112464639</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/112464639</guid><author>breadheart</author><pubDate>Mon, 11 Jan 2021 11:40:49 +0800</pubDate><description><![CDATA[什么是override？

override 是C++11引进的一个说明符，翻译为 覆盖 的意思。C++11 中的 override 关键字，可以显式的在派生类中声明，哪些成员函数需要被重写，如果没被重写，则编译器会报错。



override有什么用?

在我们C++编程过程中，最熟悉的就是对接口方法的实现，在接口中一般只是对方法进行了声明(declaration)，而我们在实现时，就需要实现接口声明的所有方法。
在程序中加override 关键字，可以避免派生类中忘记重写虚函数的错误。
另一个典型..]]></description><category></category></item><item><title><![CDATA[C++11中enable_shared_from_this的用法解析]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/112451022</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/112451022</guid><author>breadheart</author><pubDate>Sun, 10 Jan 2021 23:28:49 +0800</pubDate><description><![CDATA[什么是 enable_shared_from_this?
下面摘自 cpp reference 中概述

C++11开始时支持 enable_shared_from_this，它一个模板类，定义在头文件 &lt;memory&gt;，其原型为： template&lt; class T &gt; class enable_shared_from_this;


std::enable_shared_from_this 能让其一个对象（假设其名为 t ，且已被一个 std::shared_ptr 对象 pt ]]></description><category></category></item><item><title><![CDATA[C++中mutable关键字]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/112443301</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/112443301</guid><author>breadheart</author><pubDate>Sun, 10 Jan 2021 21:09:01 +0800</pubDate><description><![CDATA[C++中mutable关键字


mutable是什么？

mutable的中文译为 “可变的，易变的”，是constant（即C++中的const）的反义词。
C++中为了突破 const 的限制而采用的，被 mutable 修饰的变量将永远处于可变的状态。



为什么要用mutable？

我们知道，如果类的成员函数不会改变对象的状态，那么这个成员函数一般会声明成const的。但是，有些时候，我们需要在const的函数里面修改一些跟类状态无关的数据成员，那么这个数据成员就应该被 mutable 来修饰]]></description><category></category></item><item><title><![CDATA[常用网站和在线工具]]></title><link>https://blog.youkuaiyun.com/breadheart/article/details/100171643</link><guid>https://blog.youkuaiyun.com/breadheart/article/details/100171643</guid><author>breadheart</author><pubDate>Sat, 31 Aug 2019 13:02:23 +0800</pubDate><description><![CDATA[介绍一些自己在学习中常用的网站和工具，方便自己查阅和大家学习。
文章目录博客和知识社区公开课和在线视频学习编程和刷题网站在线工具
博客和知识社区

优快云 :国内主流的博客，平常访问的比较多。
Stack overflow ：国外很好的技术社区，平时遇见的问题90%以上都可以在上面找到。
知乎：国内很好的技术知识问答社区，在上面可以找到许多学习的资料和诸多大咖分享的知识经验。
Github：全球...]]></description><category></category></item></channel></rss>