网络

是的,net.ipv4.tcp_tw_recycle 在 Linux 4.12 已经彻底删除(commit 4396e46187ca "tcp: remove tcp_tw_recycle",2017-07)。4.12 以后的内核上这个文件根本不存在,sysctl -w net.ipv4.tcp_tw_recycle=1 会直接报 "No such file or directory"——网上那些"三件套调优"(tw_reuse +…

xiedeacc 发布于 阅读 218

How fast are Linux pipes anyway?

In this post, we will explore how Unix pipes are implemented in Linux by iteratively optimizing a test program that writes and reads data through a pipe.1 We will begin with a simple program with a throughput of around…

xiedeacc 发布于 阅读 55

std::is_aggregate

什么是聚合体 聚合体(aggregate)是可以直接用花括号按成员顺序逐个初始化、而不经过任何构造函数的类型。 它包括两类: 数组:任何数组都是聚合体。 满足以下全部条件的类(struct、class、union): 没有用户声明的构造函数(C++20 的规则,各版本的差异见下表) 没有 private 或 protected 的直接非静态数据成员 没有虚函数 没有虚基类,也没有 private 或 protected…

xiedeacc 发布于 阅读 108

现代C++杂项

1. std::apply std::apply(f, t) 把 tuple 类对象的元素展开成参数去调用 f,等价于 f(std::get<0>(t), std::get<1>(t), ...)。它是 C++17 引入的,定义在 <tuple> 中。能展开的类型包括 std::tuple、std::pair、std::array,C++23 起还包括 std::ranges::subrange 等其他 tuple-like 类型。…

xiedeacc 发布于 阅读 192

ranges

下面分为常见面试题和常见坑两部分。代码都没有实测,涉及标准细节的地方以 C++20 最终版及其后续缺陷修正(DR)为准。 一、常见面试题 1. ranges 是什么,解决了什么问题 ranges 包含三部分: range:任何能调用 begin()/end() 的东西。end 可以和 begin 是不同的类型,这种 end 叫 sentinel(哨兵)。 std::ranges:: 算法:直接接收整个 range,并且用…

xiedeacc 发布于 阅读 161

concept / requires

没有实测,下面的内容来自标准规则和实现知识。 一、是什么 concept(概念):给模板参数的要求起一个名字,本质是一个编译期的布尔谓词。 requires 子句:把这个谓词挂到模板上,不满足就不参与重载。 requires 表达式:检查"某些表达式对这个类型是否合法",求值结果是 true 或 false。 一个 concept 可以用四种写法挂到函数上,效果相同: 二、解决了什么问题…

xiedeacc 发布于 阅读 140

完美哈希

1. 什么是完美哈希 普通哈希函数面对任意输入,冲突无法避免,所以哈希表需要链表或探测序列来处理冲突。完美哈希针对的是一个事先完全已知、固定不变的 key 集合:既然知道全部 key,就可以专门为这批 key 找出一个函数,让它们落到互不相同的槽位上,一次冲突都没有。 术语含义完美哈希(PHF)对集合 S 里的 n 个 key,h(k) 两两不同最小完美哈希(MPHF)在此基础上,值域正好是 [0, n),表的大小就是…

xiedeacc 发布于 阅读 148

constexpr、 consteval、 constinit

下面分三部分:constexpr 的作用、常见面试题、常见坑。代码没有实测,编译器限制的数值来自 GCC 文档,属于实现细节。 一、constexpr 究竟有什么用 它让一段计算可以在编译期完成,并且让计算结果能用在"必须是常量"的地方。 具体有四类用处: 用处例子1. 在要求常量表达式的地方使用计算结果数组大小、模板实参、case 标签、static_assert、alignas、枚举值2. 把运行时的开销挪到编译期查找表、CRC…

xiedeacc 发布于 阅读 75

lambda表达式

下面分成"常见面试题"和"常见坑"两部分。代码没有实测过,涉及 sizeof 的数值以 GCC/libstdc++(x86_64)为准,属于实现细节。 一、常见面试题 1. lambda 的本质是什么 lambda 表达式会生成一个匿名类(闭包类型)的对象: 捕获的变量成为这个类的数据成员。 函数体成为这个类的 operator(),而且默认是 const 成员函数。 每个 lambda 表达式都有自己独一无二的类型。即使两个…

xiedeacc 发布于 阅读 86

SFINAE

xiedeacc 发布于 阅读 39