摘要:
ngx_align 值对齐宏 ngx_align 为nginx中的一个值对齐宏。主要在需要内存申请的地方使用,为了减少在不同的 cache line 中内存而生。 // d 为需要对齐的 // a 为对齐宽度,必须为 2 的幂 // 返回对齐值 #define ngx_align(d, a) ((( 阅读全文
摘要:
如何使用 SystemTap 对程序进行追踪 从春哥(章亦春)那看到的关于SystemTap的介绍,让我对动态追踪这个功能颇为感兴趣,觉得这是一个非常有用的功能。 SystemTap对内核及用户态程序提供了动态追踪功能,用户可以自定探测事件来跟踪程序的运行情况,如函数的调用路径、CPU占用和磁盘IO 阅读全文
摘要:
一次内核 crash 的排查记录 使用的发行版本是 CentOS,内核版本是 3.10.0,在正常运行的情况下内核发生了崩溃,还好有 vmcore 生成。 准备排查环境 crash 内核调试信息rpm,下载的两个 rpm 版本必须和内核版本一致 kernel-debuginfo-common-x86 阅读全文
摘要:
LLVM 编码规范 LLVM Coding Standards 官网 | 历史翻译版本 Github 导论 语言、库和标准 C++ 标准版本 C++ 标准库 Go 代码准则 机械的代码问题 代码格式化 注释 头文件 类概述 method information 注释格式化 使用Doxygen注释 错 阅读全文
摘要:
std::vector 的一些简单分析 从源码视角观察 STL 设计,代码实现为 libstdc++(GCC 4.8.5). 由于只关注 vector 的实现,并且 vector 实现几乎全部在头文件中,可以用一个这样的方法里获取比较清爽的源码 // main.cpp #include <vecto 阅读全文
摘要:
虚函数是一种成员函数,其行为可以在派生类中被覆盖,支持动态调用派发。 使用示例代码如下: extern "C" { // 避免 operator<< 多次调用,简化汇编代码 void println(const char *s) { std::cout << s << std::endl; } } 阅读全文
摘要:
迭代器的一些简单理解 使用迭代器最方便的地方就是和算法库结合,对于实现只需要聚焦于算法,而不用过多考虑数据结构的实现。 举一个常见的的例子,std::copy_n 用作于范围元素的复制,适配于各个容器类型,并且演化出了 back_inserter/front_inserter/inserter 这类 阅读全文
摘要:
智能指针一些实现分析 提供值传递但是指针语义的功能。通过指针占用并且对管理对象,在离开作用域时释放该对象。 在使用上还有另外一个很好用的功能,精简了代码复杂度,管理的对象类可以省略以下的函数 默认构造函数 复制构造函数 复制赋值函数 比如有一个类 Fd 用于管理 fd ,并且拥有 fd 的所有权,所 阅读全文
摘要:
本文为对不同场景下的构造函数调用进行跟踪。 构造函数 默认情况下,在 C++ 之后至少存在六个函数 默认构造/析构函数,复制构造/复制赋值,移动构造/移动赋值。以下代码观测发生调用的场景 #include <iostream> struct Foo { Foo() : fd(0) { std::co 阅读全文
摘要:
spdlog 基本结构分析 代码取自 V1.5.0, 代码堪称美学。 spdlog 是一个只有头文件的C++日志库,速度非常快,扩展性很强,更重要的是 社区活跃,文档齐全。 使用 参考官方的 example. {fmt} 的格式使用也需要熟悉一下,毕竟也进 C++20 了,什么垃圾流就快扫进历史的垃 阅读全文