罗 乾 林
2021-09-03
发现代码中opStackSize的大小为固定值,是否可以通过数据流分析的方法,计算出实际需要的最大操作数栈大小,我想这样也能减小栈帧的大小
作者回复: 没错,我这里偷懒了。我有时间会补上。 有兴趣的同学也可以把这里补上。
大豆
2021-09-01
原来如此,Java,dart中一开始为堆,栈分配固定的内存大小。就是采用的Arena内存管理技术,从而减少了系统调用。 从计算机硬件角度来看,Arena 内存管理技术能够增加l1,l2,l3的缓存命中率,减少从物理内存的读取次数,从而来提升效率。 老师,我的想法对吗?
1
ifelse
2022-09-14
来自浙江
学习打卡
功夫熊猫
2022-08-06
来自江苏
感觉可以先用写个内存池之类的,然后每次就从内存池调用
...
2021-10-31
用JS实现的AST以及栈虚拟机不存在这种问题 是因为JS中创建对象时已经使用Arena内存管理技术。但C语言是底层语音没有这些优化,所以会出现C还不如JS的性能问题?
云师兄
2021-10-08
语言运行时优化的关键是内存管理的栈和堆的分配!
奋斗的蜗牛
2021-09-02
想不到c语言版的栈帧还可以怎么减少空间
qinsi
2021-09-01
目前这个vm的ts版本无论是字节码还是堆栈都是用Array存储的。入栈和出栈操作都是在Array尾部进行的,而Array是会动态调整大小的。一个可能的优化是事先固定Array大小并自己维护栈顶指针;也可以仿照Arena来尝试优化新创建Array的开销;还可以考虑用Buffer/ArrayBuffer替代Array。不过v8是个高度优化的引擎,上述这些优化究竟有没有作用还要看profile的结果。