Vim垂直分窗(-O)与水平分窗(-o)打开文件的内存占用差异原因
Vim垂直/水平分窗打开多文件时内存占用差异的原因
测试场景
用于生成测试文件的Shell脚本:
#!/bin/bash N=$1 N=${N:=10} for x in $(seq $N); do x=$(printf "%03d" $x) filename="w$x.txt" cat /dev/urandom | tr -dc '0-9a-zA-Z' | fold -w80 | head -n 10000 > $filename done;
操作与结果
- 执行
vim -O w*txt以垂直分窗打开所有100个文件,通过pmap $(pidof vim)测得内存占用为67368K - 执行
vim -o w*txt以水平分窗打开所有100个文件,测得内存占用为38952K
内存差异的核心原因
Vim的分窗渲染机制是导致差异的关键:
1. 垂直分窗的独立行缓存开销
垂直分窗时,每个窗口的宽度会被压缩到极小(100个垂直分窗均分终端宽度),Vim需要为每个窗口独立维护行渲染缓存——因为长行需要根据当前窗口宽度截断,截断后的内容是窗口独有的,无法复用。100个窗口就对应100份独立的行缓存,叠加后内存占用大幅上升。
2. 水平分窗的缓存复用逻辑
水平分窗时,所有窗口的宽度与终端总宽度一致,同一行内容的截断规则完全相同。Vim可以复用同一套行渲染缓存,不需要为每个窗口单独生成截断后的行数据。即使有100个水平分窗,核心的行缓存只需要维护一份,内存开销自然更低。
3. 辅助渲染数据的重复开销
垂直分窗还会产生额外的窗口独有数据,比如行内光标位置映射、折叠标记的位置计算等,这些数据每个窗口都要单独存储。而水平分窗的辅助渲染逻辑可以共享大部分数据,重复开销极低。
内容的提问来源于stack exchange,提问作者tahzibi.jafar
相关产品推荐
相关产品推荐

