关于默认构造函数 惟有当默认构造函数被需要(被调用),它们才会被编译器创建出来。 什么是默认构造函数 默认构造函数是可以不用实参进行调用的构造函数,它包括了以下两种情况: 没有带明显形参的构造函数。 提供了默认实参的构造函数。 类设计者可以自己写一个默认构造函数。编译器帮我们写的默认构造函数,称为“合成的默认构造函数”。强调“没有带明显形参”的原因是编译器总是会...
构造函数与析构函数
介绍 需要一个机制来建立一个工作环境(构造函数)和一个逆操作来释放运行期获得的资源(析构函数)。以下摘自1979 年的实验记录本: “new 函数”为成员函数创建运行的环境 “delete 函数”则执行相反的操作 构造函数 为什么需要构造函数 在C里面,经常需要给变量赋初值,也就是变量的初始化。如果变量比较多,一般会有个init()函数将所有的变量都初...
二进制优化
二进制优化工具BOLT是Facebook开发的基于LLVM的工具,它利用反馈数据(perf采样或插桩)优化二进制布局以提高应用程序性能。 BOLT对应用的优化作用主要来自与BB块重排、函数重排、冷热分区。 BB块 BB块(Basic Block)是编译器对代码进行编译分析的最小单元。编译器把程序拆分为许多BB块进行分析。 BB块组成了一个程序控制流图的节点,具有一下特征: 只...
LLVM
LLVM介绍 https://aosabook.org/en/llvm.html LLVM一开始就被设计为一组具有良好定义接口的可重用库。不像GCC那样很难重用它的parser来进行静态分析或者重构。 LLVM设计最重要的方面是LLVM中间表示(IR). 写一个LLVM Pass # 生成.bc ./bin/clang++ -emit-llvm -c hello.cpp -o he...
IPA
过程间分析(Inter-Procedural Analysis)是一个多步骤的过程,是LTO分析过程中的重要部分,也是一个跨模块的分析过程。过程间分析包含local分析和global分析。局部分析会为每一个过程和调用点生成Local Summary;全局分析时会根据具体要解决的数据流问题在Local Summary中去查找。 IPA 选项 -fipa-pure-const Dis...
Memory-Hierarchies-Matrix-Multiplication
Memory-Hierarchies-Matrix-Multiplication
Introduction to Parallel Computing-From Algorithms to Programming on State-of-the-Art
1. Why Do We Need Parallel Programming 1.1 Why-Every Computer Is a Parallel Computer Nowadays, all computers are essentially parallel. The parallelism is found on all levels of a modern computer’s ...
Berkeley-CS267
A parallel computer is about how things are connected together the network that connects the parallel computers together and they can be connected in a number of different ways we’re going to tak...
variadic template
variadic templates 可变参数模板,是C++11新增的强大的特性之一,它对模板参数进行了高度泛化,能表示0到任意个数、任意类型的参数。 谈的是templates function template class template 变化的是template parameters 参数个数,利用参数个数逐一递减的特性,实现递归调用,基于f...
智能指针
4种智能指针 shared_ptr中循环引用怎么解决? shared_ptr使用了引用计数,每个shared_ptr的拷贝都指向相同的内存,每次拷贝都会触发引用计数+1,每次生命周期结束析构的时候引用计数-1,在最后一个shared_ptr析构时,内存才会释放。 如下图左边代码存在shared_ptr循环引用问题,aptr和bptr的引用计数为2,离开作用域后aptr和bptr的引用计...