#2397·ratatui

老鼠是否缺乏奶酪?嵌入式系统的内存使用情况。

作者: junkdog创建于 2026年2月14日更新于 2026年7月30日
标签Type: EnhancementType: RFC

电线#

嵌入式设备有smol记忆. 我们可以用自定义字符串类型来替换 ‘ Cell: symbol' 来保存一些内存 。 但它应该带有特性/仅适用于嵌入式。

  • 背景情况 MCU有微量的内存可用(通常在200kb左右). 由于记忆是如此珍贵,我一直在四处寻找地方 释放一些额外的资源 在记忆约束设备。 ratatui维持了"Vec`"的两个屏幕缓冲器,其中每个"Cell:: symbol"由一个"CompactString"代表——32位上12个字节,64位上24个字节(这构成细胞内存用量的~40%).

50x24终端,即“50242=2400”电池,或32位的MCU上刚超过28克。 ratatui的单元格支持比起mousefood更广泛的符号范围——鼠标food从未为符号分配超过4字节. 这里有一个相当大优化的机会 如果我们增加一个选择进入的功能 以允许更紧凑的字符串类型。

提议

我打开了POC作为公关草案(#2398), 它围绕一个4字节的 " EmbedStr " 展开,该 " EmbedStr " 是Cell: symbol " 的内部,取而代之的是CompactString'。 这导致了在绘制"idle UI"(只是绘制一些基本部件)时的帧率翻了一番——运行一个简单的全程过渡动画的速度大约快了30%,而内存的使用从120kb减少到了90kb. POC还围绕单元格宽度计算进行一些优化(在嵌入式上很容易——鼠标食品只支持单个单元格宽度字体),但这些与内存无关.

基准结果在POC PR中被公布,但总的来说它比现有的impl快了2-8x.

  • 权衡

4字节固定尺寸法是指"EmberdedStr"可以存储一个单一的单码编码点,但不能存储多码点的石墨(emoji ZWJ序列,结合字符等). `附录-同义词()'被划出为无字。 对于鼠标食品和类似的嵌入式使用案例,这是一个非问题,但值得一提.

内容来源: ratatui/ratatui