Lobsters | 📄 原文链接 | 2026-10-23 收录

用一个近似式加小修正表,把枚举转字符串的偏移表再压一半

来源:corsix.org — 2026-10-21

📋 概述

把枚举转成字符串的 switch,在 -O2 以上会被 GCC 改写成指针数组,但指针表加上重定位项太占空间。常见优化是把所有字符串拼成一段连续内存,改用 uint16 偏移表。作者再进一步:偏移随枚举值近似线性增长,先用 x*17 这样的线性近似,再用一张小修正表兜住 [-9,+10] 的误差,于是原来的偏移表被更小的修正表取代。

🔑 核心要点

💡 金句

It is rarely the case that x * 17 exactly equals offsets[x], but the difference happens to always end up being in the range [-9, +10].
← 返回 Lobsters 首页