电影旅行敲代码

C++ 编译 操作系统

CppCon 2018: Jason Turner “Applied Best Practices”总结一 :why noexcept?

什么是noexcept 在CppCon 2018上,Jason Turner在talk《Applied Best Practices》中提出总结了几点best practices,我会通过几篇文章做一些笔记,本文章对c++11中noexcept进行一些总结。 noexcept specifier ...

2018-11-25 20:05:26

阅读数 115

评论数 0

clang static analyzer中的数据结构及内存分配策略 - ImmutableMap & ImmutableSet篇

clang static analyzer中使用到的数据结构 注:这篇博客的初衷来源于[Analyzer] Attempting to speed up static analysis clang static analyzer中使用到的数据结构大致有以下几种,ImmutableMap,Imm...

2018-04-21 18:50:14

阅读数 310

评论数 1

__builtin_addressof

__builtin_addressof __builtin_addressof是由Richard Smith提交到clang中的,提交的patch为Add a __builtin_addressof that performs the same functionality as the buil...

2018-04-15 17:30:10

阅读数 284

评论数 0

llvm:: IntrusiveRefCntPtr

boost::intrusive_ptr 在介绍llvm::IntrusiveRefCntPtr之前,先介绍intrusive_ptr的概念,intrusive_ptr也是智能指针的一种,同样避免内存泄漏的安全问题,并且intrusive_ptr也是基于RAII实现的。但intrusive_pt...

2018-04-14 17:48:51

阅读数 121

评论数 0

llvm::ArrayRef和llvm::StringRef

llvm中的一个bug工作中遇到了一个关于关于llvm::ArrayRef和std::vector的内存bug,这个bug涉及到llvm::ArrayRef的实现以及相关的概念,这里做相关介绍。该bug由[Bash-autocompletion] Add support for static an...

2018-02-04 15:54:45

阅读数 503

评论数 0

自定义类型使用range-based for loops

Range based for loops(范围for循环) 在https://reviews.llvm.org/D42300#inline-369356 中被提建议使用range based for loop,但是在我印象中range based for loop只被用在了c++11容器中,当...

2018-01-27 17:46:48

阅读数 419

评论数 0

inline - performance

引言函数内联(inline)算是C/C++很重要的语言特性,对于函数体比较小的函数来说 inline 可以说是一种比较重要的优化了。inline 在函数调用处(Call Site)使用函数体进行替换, inline 和 macro 很相似,但是又有一些不同,inline expansion 是在编...

2016-09-01 21:56:35

阅读数 531

评论数 0

构造Dominator Tree以及Dominator Frontier

支配树(Dominator Tree)在生成SSA的时候,需要计算在何处插入正确的 Φ (phi-function) ,一种方法是在所有有多个前驱的Basic Block的开头插入 Φ-node,但是这种方法会插入很多的无用的 Φ-node ,有很多 Φ-node 的参数都是相同的一个定义。 ...

2016-08-17 13:56:14

阅读数 2559

评论数 1

C++11中的 "enable_if"小记

std::enable_if

2016-06-18 16:27:06

阅读数 11523

评论数 0

Name Mangling

引子为了在链接的时候能够让链接器唯一标识全局变量或者函数等的符号,编译器实现了一种name mangling的技术(也叫做name decoration),这个技术能够给所有目标文件中的符号一个唯一的名字。具体的实现方式就是编译器向函数,结构体,类或者其他的数据类型的对象名中附加上相应的类型信息,...

2016-02-29 16:59:40

阅读数 1521

评论数 0

RTTI机制详解

引子以前我们探讨过,RTTI的访问和虚表相关,并且RTTI基本上是为了dynamic_cast<>和typeid以及异常而实现的。今天我们详细探讨下异常的实现机制。RTTI、虚表以及类的内存布局遵循的通常是Itanium C++ ABI,我不知道这个名字为什么会演化成现在这个样子,但是...

2015-12-14 19:10:08

阅读数 758

评论数 0

编译器或者链接器会优化掉虚表吗

引子前一段时间和实验室的同学讨论虚表和RTTI相关的问题,由于我是编译器论调的拥泵,所以我信誓旦旦的说如果编译器发现虚表或者虚函数无用的话,会自动优化掉这些虚表信息。但是查过资料才发现,其实编译器并不会这么做!ODR原则在C++中有一个很重要的概念就是ODR原则,总的来说,ODR分为3个方面: 一...

2015-12-13 15:41:55

阅读数 1091

评论数 0

C++中的out-of-line虚函数

引子在现实编码过程中,曾经遇到过这样的问题“warning:’Base’ has no out-of-line method definition; its vtable will be emitted in every translation unit”。由于对这个warning感兴趣,于是搜集...

2015-12-03 16:37:46

阅读数 2610

评论数 1

C++中的Observer模式

引子什么时候Observer模式呢? 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象细节 许多时候,我们都需要当我们应用的一部分状态更新时,其他部分的状态能够相应的更新。有一种方式就是让接收者不断地去检查发送者的状态...

2015-11-26 22:01:59

阅读数 777

评论数 0

C++11中的POD和Trivial

引子在介绍C++11的文章或者博客中,经常会出现POD类型和Trivial类型的影子。但是POD类型和Trivial类型到底是什么意思呢? POD类型 POD类型的好处 POD类型粗略上来讲,POD是C++为兼容C的内存布局而设计的,主要用于修饰用户自定义类型。但POD却远比这个要复杂。POD(P...

2015-11-25 20:50:09

阅读数 2429

评论数 0

由C++构造函数初始值列表想到的

引子 大家在编写C++代码的时候,总是会遇到下面这个问题,什么时候为构造函数提供初始值列表(当然,推荐做法都是以初始值列表代替构造函数体内赋值)。数据成员初始化动作是在构造函数体之前的,相对应的,析构函数的数据成员销毁动作是在析构函数体之后的。所常见的必须提供初始值列表的情况有, 数据成员含...

2015-11-10 20:30:21

阅读数 487

评论数 0

C++中的volatile

引子在阅读代码的过程中,相信大家都遇到过”volatile”这个关键字,有的人知道和编译器优化相关,甚至有的人根本不知道该关键字的功用volatile A type qualitier that you can use to declare that an object can be modi...

2015-11-09 11:30:55

阅读数 473

评论数 0

C++中的new/delete和new[]/delete[]

引子 C++的new/delete C++的new[]/delete[] C++的new/delete当我们使用一条new表达式时:// new表达式 string *sp = new string("a value"); string *arr = new string[10...

2015-11-07 17:27:20

阅读数 502

评论数 0

C++中的"delete this"

引子 C++中delete能否用于栈对象 C++中”delete this”会出现什么问题 C++中”delete this”有什么规避方法 C++中delete能否用于栈对象在大家的印象中delete只能用于new出动态内存对象,我们使用了g++/Clang++/MSVC来测试delete栈对象...

2015-11-06 19:36:00

阅读数 1417

评论数 0

C++一种智能指针的实现

引子 C++智能指针shared_ptr<> 以对象管理资源 一种智能指针的实现 C++智能指针shared_ptr<>为了兼容C语言,并且由于垃圾回收的性能原因,C++没有引入垃圾回收。但是动态内存分配又是现实编码中不可或缺的一部分,由程序员自己控制分配和回收。C++11...

2015-11-04 11:29:19

阅读数 566

评论数 0

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