Playdate 上的“肮脏”优化:把 CPU 喂饱而不是把代码写漂亮
来源: devforum.play.date
概述
这则开发者论坛帖总结了一批不常见的 Playdate 优化手法。核心心智模型是“CPU 很快、内存很慢”,因此作者主张压缩核心代码以塞进极小的指令缓存,并利用 TCM 与自定义链接脚本换取速度。
核心要点
- 把 Playdate 的 CPU 理解为“很快的 CPU + 很慢的内存”:只要代码主要在寄存器上工作,即使循环多、分支预测差也能跑得飞快。
- Rev A 的指令缓存只有 4KB,所以 -O3 未必最快:作者把 20KB 的模拟器内核压到 2KB 并使用 -Os,行为不变但明显更快。
- 用 __attribute__((section(".text.xxx"))) 让核心函数在链接后落在连续地址,再配合自定义链接脚本把冷代码挪开。
- TCM 区域速度快于普通内存,栈就位于其中:把结构体 memcpy 到栈上运算再拷回,能带来可观提升。
- 更进一步可以用 __builtin_frame_address(0) 定位栈底,划出一块常驻的 dtcm_mempool,并在两端放 canary 防止栈溢出破坏。
- 代码同样可以放进 ITCM:手工把 .text 拷过去,这在 Rev A 上被作者称为高效 Game Boy 模拟的“秘方”。
- 这些技巧更适合模拟器、大型仿真、3D 渲染器与编解码器这类追求极致性能的场景。
金句
如果你的核心代码塞不进这 4KB 缓存,那它的性能就很难比得上更紧凑的代码。
👍 0
👎 0
← 返回 Lobsters 首页