![]() |
1
2
在C(或C++)中,您对每个数据结构的精确大小有细粒度的控制。您还可以对存储分配进行细粒度控制。毕竟,你可以延长
在大多数动态语言(如python)中,您完全无法控制任何东西的确切大小,更不用说它的位置了。 在Python中,您可能有一些时间位置,但您几乎没有空间位置。 通过对结果的简单记忆,可以增强时间区域性。这是一种常见的加速,人们通常会包括一个memoization装饰器来将memoization(时间位置)从核心算法中分离出来。 我不认为C或C++缓存遗忘的实现转化为动态语言,因为我认为你没有足够的控制权。相反,只是利用记忆加速。 |
![]() |
2
1
缓存遗忘算法的一个主要点是对象的大小并不重要(因为您无论如何都不知道下一级内存分页的大小),因此无法知道确切的大小并不重要。在某种程度上,超过1个对象的大小“适合”下一个内存块大小。(注意:不知道对象的大小对于缓存感知实现来说是一个重要的问题)。 另外,大多数VM内存分配器将在生成空间结束时分配,只要您同时分配所有对象,就可以从OK开始。不幸的是,一些高速缓存遗忘算法假定您可以更改内存布局,而这通常在虚拟机中是不可能的。 另一个大问题是,大多数基于虚拟机的实现都使用对象的引用。所以一个包含三个字符串的对象实际上是4个对象(对象本身和3个字符串对象)。除非这四个对象彼此相邻分配,否则算法的分析将中断。 此外,还可以压缩垃圾收集器和其他“优化”,这是虚拟机可以自由执行的,并且您需要的控制与这些算法的当前研究状态之间存在很大差距。 |
![]() |
tincho87 · 避免Javascript/Css缓存 7 年前 |
![]() |
Zac · 如何强制客户端重新下载我的网站? 7 年前 |
![]() |
Kumar · bitbake清理使用只读NFS SSTATE缓存失败 7 年前 |
![]() |
Chris Williams · 休眠/JPA缓存查找值 7 年前 |
![]() |
Nymeria · 仅绑定到当前事务的Spring缓存 7 年前 |