读书笔记
文章平均质量分 86
Chris_zhangrx
读书郎
展开
-
如何写出好的变量名
本文内容主要是摘抄自《代码大全》中与变量名相关章节的内容,阐述当需要一个好的变量名需要注意哪些点。原创 2022-10-24 07:46:08 · 443 阅读 · 0 评论 -
JIT 和 AOT
JIT 和 AOT本文内容主要来自于偶然看到的一个 b 站视频:https://www.bilibili.com/video/BV1134y1h7ED?spm_id_from=333.999.0.0之前就不断的在各种不同的场合看到 JIT 编译,AOT 编译,除了基本概念一直对这二者都是比较模糊的概念。通过视频中的介绍有了更多的理解,简而言之:JIT 是动态编译,会有更多地运行时信息,可以做更激进的编译优化,更耗内存AOT 是静态编译,更多偏控制型指令的优化,为了保证正确性,编译优化相对比较保守。原创 2022-05-23 22:12:55 · 864 阅读 · 2 评论 -
[读书笔记]《Hands on Design Patterns with C++》—— CRTP
多态是指使用父类可以访问基类的内容,并且基类对子类的内容毫不知情,因为父类已经写了或者被编译了,但是基类可能还没有没编写出来。但是有一个 idiom, Curiously Recurring Template Pattern (CRTP) 则是完全颠覆了这一情况。要了解学习 CRTP,我们首先需要讨论的是, virtual function 有什么问题? 虚函数最大的是性能负担,因为需要一个额外的虚函数指针,包括调用,间接跳转。template <typename D> class B {原创 2022-04-18 09:23:55 · 693 阅读 · 0 评论 -
[读书笔记]《Hands on Design Patterns with C++》——RAII,SFINAE
第 5 章 RAIIRAII(Resource Acquisition is Initialization)构造函数获取资源,析构函数释放资源。 注意拷贝和释放,有的需要禁止拷贝移动等。What is considered a resource in a C++ program?每一个程序运行都需要一定的资源,最常使用的资源就是内存,但资源这个概念是多种多样的。只要是资源就会设计到一个问题,如何确保资源管理是正确的。首先人为的管理每一个资源是很容易出错的。例如申请一个指针,却忘记释放。 并且,当我们原创 2022-04-16 22:30:25 · 592 阅读 · 0 评论 -
[读书笔记]《Hands on Design Patterns with C++》—— 内存所有权,swap
第 3 章 内存所有权(memory ownership)内存管理不当也是 C++ 里面比较常见的问题。有可能就会引起内存泄漏,访问非法内存,过量内存使用,或者一些其他比较难 debug 的问题。所以现代 C++ 提供了一些 idiom 来让程序设计者代码设计中清晰的表达他们的意图。这样更容易写出正确分配内存,访问,或者注销内存的代码。What is memory ownership?驻留在内存中对象的内存和生命周期的管理。内存也是一种资源,而一般是通过对象来拥有资源,所以也可以称为 对象所有权(ob原创 2022-04-16 22:27:19 · 780 阅读 · 0 评论 -
[读书笔记]《Hands on Design Patterns with C++》——类,继承,多态,模板
前言《Hands on Design Patterns with C++》首先这本书不是跟之前的书籍一样只是重点在经典的 23 种“设计模式” 上,这些经典的设计模式当然可以使用 C++ 语言来实现,但是 C++ 强大的地方在于其泛型编程能力。而且设计模式一般是在软件设计中比较有挑战性的场景下, 提出的一些解决方案。一个是问题场景,一个是对应提出的解决方案。 随着时间的推移,一些场景中,会有更好地解决方案被提出,同时呢,也会遇到新的挑战。 本书显式介绍了 C++ 的一些特性,并且结合这些特性以及它们可以解原创 2022-04-16 22:24:17 · 2192 阅读 · 1 评论 -
[读书笔记]《Effective Modern C++》—— 移步现代 C++
文章目录前言item7:区别使用 () 和 {} 创建对象item8:优先考虑使用 nullptr 而不是 0 或者 NULLitem9:优先考虑别名声明而非 typedefsitem10:优先考虑限域枚举而非限域枚举item11:优先考虑使用 deleted 函数而非使用未定义的私有声明item12:使用 override 声明重载函数item13:优先考虑使用 const_iterator 而非 iteratoritem14:如果函数不抛出异常请使用 noexceptitem15:尽可能的使用 cons原创 2022-02-10 08:42:04 · 1056 阅读 · 0 评论 -
[读书笔记]《Effective Modern C++》—— 智能指针
文章目录前言std::unique_ptrstd::shared_ptrstd::weak_ptr前言大部分同学可能都可以熟练知道,智能指针是管理内存的一种有效手段,shared_ptr 是通过引用计数来管理内存,当引用计数为 0 的时候内存就会自动释放,weak_ptr 则是为了解决 shared_ptr 可能会出现的循环引用的问题出现,unique_ptr 则是有独占的概念的智能指针。那概念上可能就是上面的概括,继续追问一句,那什么时候应该使用 unique_ptr,什么时候应该使用 shared原创 2022-02-08 23:57:57 · 940 阅读 · 0 评论 -
[读书笔记]《Effective Modern C++》—— 类型推导、auto、decltype
文章目录前言条款一: 理解模板型别推导数组实参函数实参条款二:理解 auto 的类型推导使用 auto 的好处显式类型初始化条款三:理解 decltype返回值类型后置总结前言本文内容主要摘录自 《Effective Modern C++》,本文主要是将书中开头类型推导部分的内容放在一块进行说明,在再次品读这部分内容之前,对模板的认识就仅仅停留在模板是长这个样子的,使用的时候可以特化或者偏特化,对更深入的内容不曾有意识涉及。通过下面的内容对 C++ 的类型推导,以及 auto 和 decltype 等关原创 2022-02-07 21:48:35 · 795 阅读 · 0 评论 -
[读书笔记]《深度探索C++对象模型》
文章目录前言第一章 关于对象第二章 构造函数语意学构造函数拷贝构造函数初始化列表第三章 Data 语意学第四章 Function 语意学非静态成员函数静态成员函数虚成员函数第五章 构造、析构、拷贝语意学RTTI模板函数的实现逻辑前言俗话说得好,好记性不如烂笔头,本文主要是重温了一下经典书籍《深度探索C++对象模型》,然后一些内容摘录,主要记录的是我自己的精简版,建议读者有相关的知识需要还是慢慢去啃一下原书比较好。第一章 关于对象首先介绍了 C++ 类的情况, C++类的内存存储方式是:只包含非静态成原创 2022-01-09 17:02:29 · 1227 阅读 · 0 评论 -
PNNX 相关内容介绍
文章目录PyTorch 部署方式Lower一些思考PNNX关于 MLIR本文主要是根据 b 站关于 PNNX 的分享视频做的一个内容摘录,如果感兴趣的同学可以移步☞:PNNX介绍本人还没人正式地使用过 ncnn 这个开源项目,但是视频中提到的 nihui 大佬的一些总结还有对于深度学习框架的观点看完以后还是大有受益的。也是引起了对 ncnn 以及最新的 PNNX 的一些兴趣,之后有机会可能会带来一些相关内容的博客。因为 PNNX 是 ncnn 针对 PyTorch 框架所做的一个模拟转换工具,并且是原创 2021-12-25 00:18:42 · 2625 阅读 · 3 评论 -
[设计模式] —— Composite 组合模式
文章目录Composite 组合模式动机定义示例代码结构图总结Composite 组合模式属于数据结构模式,常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大破坏组件的复用,这时,将这些特定的数据结构封装在内部,对外提供统一接口来实现与特定数据结构无关的访问。动机客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来代码的维护性、扩展性等弊端。如何将”客户代码与复杂的对象容器结构“解耦?让对象容器自己原创 2021-12-21 10:10:39 · 561 阅读 · 0 评论 -
[设计模式] —— Adapter 适配器模式
文章目录Adapter 适配器模式动机定义示例代码结构图总结Adapter 适配器模式属于接口隔离模式,在组件构建过程中,某些接口之间直接的依赖经常会带来很多的问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来就互相紧密关联的接口是一种常见的解决方式。动机在软件系统中,由于应用环境变换,常需要将”一些现在的对象“ 放在新的环境中应用,但是新环境要求的接口是这些现有对象所不满足的。如何应对这种”迁移式变化“?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所需求的接口?定义原创 2021-12-21 09:36:11 · 280 阅读 · 0 评论 -
[设计模式] —— Flyweight 享元模式
文章目录Flyweight 享元模式动机定义示例代码结构图总结Flyweight 享元模式属于对象性能模式,主要考虑面向对象所带来的成本问题。动机软件系统采用纯对象方案的问题在于大量细粒度的对象会很快充斥整个系统,从而带来很高的运行时代价。如何避免大量细粒度对象问题的同时,让外部客户程序依然能够透明地使用面向对象的方式来进行操作?定义运行共享技术有效地支持大量细粒度的对象。示例代码class Font {private: string key; // ...public: F原创 2021-12-21 08:49:02 · 312 阅读 · 0 评论 -
[设计模式] —— Singleton 单例模式
Singleton 单例模式属于对象性能模式,主要考虑面向对象所带来的成本问题。动机在软件系统中,有一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例。这应该是设计者的责任,而不是使用者的责任。定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。示例代码class Singleton {private: Singleton(); Singleton(const Singleton&a原创 2021-12-21 08:32:27 · 469 阅读 · 0 评论 -
[设计模式] —— Builder 生成器模式
文章目录Builder 生成器模式动机定义示例代码结构图总结Builder 生成器模式动机面临着”一个复杂对象“的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求变化,这个复杂对象的各个部分经常变化,但它们组合在一起的算法很稳定。定义将一个复杂对象与其表示分离,使得同样的构建过程(稳定)可以构建不同的表示(变化)。示例代码class House {public: // ... House* init() { this->BuildPart1(); for原创 2021-12-21 08:14:25 · 506 阅读 · 0 评论 -
[设计模式] —— Prototype 原型模式
文章目录Prototype 原型模式动机定义实例代码结构图总结Prototype 原型模式通过对象创建模式,绕开 new,来避免对象创建(new)过程中导致的紧耦合(new 需要依赖具体类),从而支持对象创建的稳定,它是抽象接口后的第一步工作动机某些结构复杂的对象的创建,由于需求变化,这些对象经常面临着剧烈变化,但它们之间却拥有比较稳定一致的接口。如何应对这种变化?如何向”客户程序“(使用这些对象的程序)隔离出这些易变得对象,从而使依赖这些依赖这些易变对象的客户程序不随需求改变而改变。定义使用原创 2021-12-20 23:41:12 · 311 阅读 · 0 评论 -
[设计模式] —— Abstract Factory 抽象工厂模式
文章目录抽象工厂动机定义示例代码结构图总结抽象工厂通过对象创建模式,绕开 new,来避免对象创建(new)过程中导致的紧耦合(new 需要依赖具体类),从而支持对象创建的稳定,它是抽象接口后的第一步工作动机主要是解决一系列”相互依赖的对象“,工厂方法是解决”单个对象“,即多个 Factory 组成一个总的基类。定义提供一个接口,让该接口创建一系列”相关或者相互依赖的对象“,无需指定它们的具体类。示例代码class EmployeeDAO {public: vector<Employ原创 2021-12-19 12:33:15 · 922 阅读 · 0 评论 -
[设计模式] —— Factory Method 工厂模式
文章目录工厂模式动机定义示例代码结构图总结工厂模式通过对象创建模式,绕开 new,来避免对象创建(new)过程中导致的紧耦合(new 需要依赖具体类),从而支持对象创建的稳定,它是抽象接口后的第一步工作动机在软件系统中,经常要有创建对象的工作,由于需求变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕开常规的 new,提供一种”封装机制“来避免客户程序和这种”具体对象创建工作“的紧耦合?定义定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method 使得一个原创 2021-12-19 12:30:52 · 696 阅读 · 0 评论 -
[设计模式] —— Bridge 桥模式
文章目录桥模式动机定义示例代码结构图总结桥模式软件组件的设计中,如果责任划分的不清晰,使继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码。动机由于某些固定的固有实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化。如何应对”多维度的变化“?如何利用面对对象关系技术来使得类型可以轻松沿着两个乃至更多的方向变化而不引入额外的复杂度。定义将抽象部分(业务功能)与实现部分(平台实现)分离,是它们都可以独立变化。示例代码class Messager {public: //原创 2021-12-19 01:33:04 · 394 阅读 · 0 评论 -
[设计模式] —— Decorator 装饰模式
文章目录装饰者模式动机定义示例代码结构图总结装饰者模式装饰模式属于单一职责模式分类里的。软件组件的设计中,如果责任划分的不清晰,使继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码。动机过度地使用继承来扩展兑现的功能,由于继承为类型引入的静态特质(定死一定只会调用子类),使扩展的当时缺乏灵活性,并且随着子类的增多(功能扩展的增多),各种子类的组合(对扩展功能的组合)会导致更多子类的膨胀。如何动态实现“对象功能的扩展”,同时避免组合过多呢?定义动态(组合)地给一个对象增加一些额原创 2021-12-18 23:37:37 · 761 阅读 · 0 评论 -
[设计模式] —— Observer 观察者模式
动机我们需要为一些对象建立一种“通知依赖”关系,即一个对象状态发生变化,所有的依赖对象(观察者对象)都将得到通知,如果依赖过于紧密,软件不能很好地抵御变化。面向对象技术可以使这种依赖关系弱化,并形成一种稳定的依赖关系,从而体系结构会松耦合。定义对象间一种一对多(变化)的依赖关系,以便当一个对象的状态(目标对象)发生变化时,所有依赖它的对象都得到通知并自动更新。示例代码class FilterSplitter {private: string m_filePath; int m_fileNum原创 2021-12-17 10:58:44 · 644 阅读 · 0 评论 -
[设计模式] —— Strategy 策略模式
文章目录动机定义示例代码结构图总结动机某些对象使用的算法可能多种多样,经常改变,将这些算法都编码到对象中,使对象变得异常复杂,而且有时支持不适用的算法也是一种性能负担。想要在运行时根据需要透明地更改对象的算法,就要将算法与对象本身解耦,从而避免上述问题。定义定义一系列算法,把它们一个个封装起来,并且它们可以相互替换(变化),该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。示例代码enum TaxBase { CN_Tax, USA_Tax};class原创 2021-12-17 09:37:57 · 756 阅读 · 0 评论 -
[设计模式] —— 设计模式的介绍及分类
前言深入理解面向对象向下:深入理解三大面向对象机制:封装:隐藏内部实现继承:复用现有代码多态:改写对象行为向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是"好的面向对象设计"。一般设计模式都是用来解决复杂性问题的,而人们解决复杂性问题主要有两个角度:分解:即分而治之,将大问题分解成多个小问题,将复杂问题分解为多个简单问题。抽象:不能掌握所有复杂的对象,我们就选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。在前面的博客中也介绍了一原创 2021-12-16 22:07:12 · 631 阅读 · 0 评论 -
《重构:改善既有代码的设计》 —— 重构方法目录
文章目录前言第一组重构封装搬移特性重新组织数据简化条件逻辑重构 API处理继承关系前言这部分主要就是记录了 《重构—改善既有代码的设计》 书中第6章 —— 第12章的一些重构手法的简单记录,如果想有更全面的了解,还是推荐看原书。下面设计到重构方法的内容,括号中的数字表示对应原书的页数。另外可以参考:《重构》 —— 重构概念及代码坏味道为本书前半部分的一些概念介绍和代码坏味道摘录。第一组重构这部分更多地就是说一些单纯的变量以及函数的简单重构手法,有一些很多就是平时我们已经无意识的在用了,但是一原创 2021-12-16 02:09:23 · 906 阅读 · 0 评论 -
《重构:改善既有代码的设计》 —— 重构概念及代码坏味道
前言本文主要来自《重构—改善既有代码的设计》的一些读书笔记和摘录,在对应的地方都标注上了书中的对应页数,可以结合原书服用。刚开始看这些所谓的重构方法可能是一头雾水,看完一遍书以后对应一些方法可能同样也是一头雾水。这里简单谈一下读完这本书我个人的收获以及感受吧。首先这可以理解为一本手册,介绍各种重构方法 61 个,我们不可能一次就把所有的方法期望可以记住,并且吸收。但是阅读完本书,对书中作者表达的一些观点很有收获,例如对测试构建的意义,包括在介绍不同重构方法时,字里行间表达数据和函数之间关系的理解,模块化原创 2021-12-15 08:41:34 · 773 阅读 · 0 评论 -
敏捷开发 SOLID 原则
文章目录单一职责原则(SRP)开放-封闭原则(OCP)Liskov 替换原则(LSP)接口隔离原则(ISP)依赖倒置原则(DIP)设计中的拙劣设计症状:僵硬性(Rigidity):很难对系统进行改动,因为每个改动会迫使很多对系统其他部分的其他改动。脆弱性(Fragility): 对系统的改动会导致系统中和改动地方在概念上无关的许多地方出现问题。牢固性(Immobility): 很难解开系统的纠结,让其成为在其他系统中重用的组件粘滞性(Viscosity):做正确的事情比做错误的事情困难不必要的原创 2021-12-11 17:38:43 · 813 阅读 · 0 评论 -
C++ tips
本文暂时收录一下 C++ 一些小的知识点。使用 sstream 等写入数据到文本,换行使用 “\n” 比使用 “std::endl” 快大概 3-5 倍。主要是 “std::endl” 会刷新输出缓存区,下面是实际数据对比:# 使用 std::endl # 使用 \n花费了20.0809秒 花费了4.73334秒花费了4.65392秒 花费了1.16888秒花费了1.37358秒 花费了0.288983秒花费了0.349523秒 花费了0.07281秒原创 2021-08-30 10:56:45 · 177 阅读 · 0 评论 -
C++ 测试驱动开发 TDD(二)
增加Soundex 算法测例 3重构以后可以继续下一个测试,我们可以处理规则2(第一个字母后,用数字替换辅音),替换规则中字母 b 对应数字 1,则可以写下面这样的测例:TEST_F(SoundexEncoding, PadWithZerosToEnsureThreeDigits) { ASSERT_THAT(soundex.encode("Ab"), Eq("A100")); }...原创 2021-05-29 16:50:02 · 961 阅读 · 2 评论 -
C++ 测试驱动开发 TDD(一)
文章目录TDD 介绍Soundex 算法示例介绍增加Soundex 算法测例1增加Soundex 算法测例2Soundex 算法测例1 、2重构增加Soundex 算法测例 3最近阅读了《C++程序设计实践与技巧:测试驱动开发》,也算是第一次系统的了解到 TDD 的概念吧,因为整个调试的过程太细了,想要一次性说明白着实需要一点功力,这里权当一些读后感分享,有兴趣的读者可以自己找到这本书来读读看。 虽然不能说可以立马有所了解,或者就可以在实际业务代码中就用上了,但是总得先有这么一个了解过程嘛。TDD 介绍原创 2021-05-29 16:20:39 · 1460 阅读 · 2 评论 -
STL 系列 —— 迭代器与 traits 编程(二)
文章目录前言迭代器内置类型声明迭代器种类 iterator_category数值型别 value type差距类型 difference typereference type 和 pointer type迭代器type traits前言计算机科学的许多问题,都是通过增加间接层的方式解决的,STL 最为人称道的是将容器和算法的实现分割开了,迭代器就是分开它们必须的中间层。算法是容器的使用者,如若二者不独立开来,算法实现的过程中会暴露很多关于容器使用的细节,而这些细节并不是每个人都可以了解的,何不让相关容器原创 2021-04-18 19:04:50 · 459 阅读 · 0 评论 -
STL 系列 —— 空间配置器(一)
前言《STL 源码剖析》,《泛型编程与STL》这两本书都是候捷大佬译的,且在 《STL 源码剖析》最后推荐读物中也出现了 《泛型编程与STL》的身影,机缘巧合就找了一下相关资源,快速翻看了一下,发现两本书的内容是如此相辅相承的,所以这里就放在一起说一说。虽然天下大作,必作于细,不过目前博主的水平有限,还是在浅浅的一层学习中,所以接下来的系列文章不会深入细节中,否则系列文章难免会变成单纯的读书摘要,又臭又长,也会给阅读的人带来不小的负担。如果对相关细节感兴趣的小伙伴还是可以自行阅读原书籍的。这也是第二遍原创 2021-04-18 13:25:27 · 305 阅读 · 0 评论 -
装载与动态链接——动态链接(二)
文章目录为什么要动态链接地址无关代码延迟绑定动态链接步骤与实现动态连接器自举装载共享对象重定位和初始化显式运行时链接前文速递:静态链接——编译和链接(一)静态链接——目标文件(二)静态链接——静态链接(三)装载与动态链接——装载与进程(一)本文主要是《程序员的自我修养》一书的内容摘要和梳理,如有需要并且没有被本文涵盖的内容,建议读者自行观看原书。前面主要写了文章来介绍书中对程序的静态链接的相关内容,接下来系列开启对动态链接的学习。为什么要动态链接静态链接可以使程序开发者可以独立地开发和测试原创 2021-04-04 14:54:31 · 649 阅读 · 2 评论 -
装载与动态链接——装载与进程(一)
文章目录进程虚拟地址空间装载的方式覆盖装入页映射进程虚寸空间分布前文速递:静态链接——编译和链接(一)静态链接——目标文件(二)静态链接——静态链接(三)本文主要是《程序员的自我修养》一书的内容摘要和梳理,如有需要并且没有被本文涵盖的内容,建议读者自行观看原书。前面主要写了 3 篇文章来介绍书中对程序的静态链接的相关内容,接下来系列开启对动态链接的学习。在介绍动态链接的内容之前要先介绍可执行文件的装载,看看可执行文件的装载的本质是什么。进程虚拟地址空间程序与进程这个算是比较基础的概念区别原创 2021-04-03 16:58:50 · 498 阅读 · 0 评论 -
静态链接——静态链接(三)
文章目录空间与地址分配符号解析与重定位静态库链接C++ 与 ABI本文主要是《程序员的自我修养》一书的内容摘要和梳理,如有需要并且没有被本文涵盖的内容,建议读者自行观看原书。基于前面两部分的内容,分别介绍了程序编译的基本流程,及目标文件结构的相关内容,本文开始介绍静态链接的过程。静态链接——编译和链接(一)静态链接——目标文件(二)空间与地址分配前面已经介绍了目标文件都是由不同的 section 组成的,本小节主要是介绍链接器是如何将不同目标文件的各个段合并在一起,最终组成一个输出文件的。最简原创 2021-04-03 15:56:13 · 745 阅读 · 1 评论 -
静态链接——目标文件(二)
文章目录目标文件目标文件格式目标文件是什么样的目标文件的细节深入ELF 文件结构描述符号前文速递:静态链接——编译和链接(一)本文主要是《程序员的自我修养》一书的内容摘要和梳理,如有需要并且没有被本文涵盖的内容,建议读者自行观看原书。在前文中介绍了源代码输入编译器以后,编译器主要做了哪些工作,最后引出链接这个话题,在详细介绍静态链接相关概念之前,需要花费一章的功夫来介绍目标文件这一话题,介绍目标文件里具体都有什么内容,为下面及本书之后的内容做一个铺垫。目标文件目标文件从格式上说就是源代码经过编译原创 2021-03-14 17:19:24 · 579 阅读 · 0 评论 -
静态链接——编译和链接(一)
本文主要是《程序员的自我修养》一书的内容摘要和梳理,如有需要并且没有被本文涵盖的内容,建议读者自行观看原书。编译与链接本部分主要是介绍关于程序源代码是如何到可执行文件的,及这其中涉及到的主要步骤(例如本书的主题——编译)的相关基本概念。源代码到可执行文件主要是分为4个步骤:预处理(Preprocess),编译(Compilation),汇编(Assembly) 和链接(Linking)。预处理预处理部分主要是处理源代码以 “#” 开头的预编译指令:展开所有的宏定义 ,“#define”。处理原创 2021-03-11 09:58:51 · 1054 阅读 · 0 评论 -
《C++并发编程实战》读书笔记——chapter 2_线程管理
更多的阅读笔记,及示例代码见 Github:https://github.com/anlongstory/C-_Concurrency_in_Action_reading_notes本章主要内容:启动新线程等待线程与分离线程线程唯一标识符2.1 线程管理基础每个程序至少有一个线程: 执行 main() 函数的线程,其余线程有各自的入口函数。 线程执行完入口函数后,线程也会推出。...原创 2018-11-24 10:20:18 · 264 阅读 · 0 评论 -
《C++并发编程实战》读书笔记——chapter 3_线程间共享数据
更多的阅读笔记,及示例代码见 Githubhttps://github.com/anlongstory/C-_Concurrency_in_Action_reading_notes本章主要内容:共享数据带来的问题使用互斥量保护数据数据保护的代替方案 想象一下,你和你的朋友合租一个公寓,公寓中只有一个厨房和一个卫生间。当你的朋友在卫生间时,你就会不能使用了(除非你们特别好,好到可...原创 2018-11-26 11:47:24 · 316 阅读 · 0 评论 -
《Distilling the Knowledge in a Neural Network》 论文阅读笔记
原文链接:https://arxiv.org/abs/1503.02531 第一次接触这篇文章是在做网络结构的时候,对于神经网络加速,知识蒸馏也算是一种方法,当时连同剪纸等都是网络压缩的内容,觉得这些方法涉及数学概念太多,就没有深入了解,直到最近看了几篇增量学习相关的论文,才发现原来知识蒸馏的思想对增量学习也影响那么大,所以再次遇见就决定读一读这篇文章,因为文中做了图像和语音两个方面的实验,这...原创 2018-12-04 16:11:17 · 2787 阅读 · 1 评论