什么是影子数组,它是如何实现的?我在阅读有关编译器优化的信息时遇到了这个术语,但我找不到任何关于它的实质性参考。
问问题
5200 次
3 回答
14
当使用数组来实现动态调整大小的抽象数据类型时,例如 List、Queue 或 Stack,遇到的一个明显问题是数组本身不能自由调整大小。那么,在某个时候,如果向数组添加足够多的项,最终将耗尽空间。
这个问题的简单解决方案是等到正在使用的数组空间不足,然后创建一个新的更大的数组,将旧数组中的所有项目复制到新数组中,然后开始使用新数组。
使用抽象数据类型实现的影子数组是对此的替代方案。与其等到旧数组已满,不如在正在使用的数组上传递某个满度阈值后创建第二个更大的数组。此后,随着项目被添加到旧数组中,多个项目从旧数组复制到影子数组,这样当旧数组已满时,它的所有项目都已经复制到新数组中。
使用影子数组实现而不是天真的“在最后复制所有内容”方法的优点是每个添加操作所需的时间更加一致。
于 2014-07-09T01:43:53.720 回答
2
我认为它是一种动态数组的形式。
阴影一词指的是试图以良好的性能调整其大小但隐藏在简单界面后面的底层算法。(例如 Java 中的 ArrayList)
于 2012-09-06T13:19:49.693 回答
1
这是你要找的吗?(滚动到底部。)
于 2012-09-06T13:28:02.843 回答