缓存链表——这是可能的吗?
Caching a linked list - is it possible?
我知道数组可以充分利用x86_64体系结构上的缓存机制,因为它们适合缓存行,并且由于它们的顺序性质。链表是由指针链接在一起的一系列结构体/对象,是否有可能利用缓存系统的这种结构?链表的对象可以分配到内存中的任何位置
确实,链表项可以在任何地方,但它们不必须在"任何地方"。例如,您可以在"区域"之外分配它们。一次分配一堆连续的条目,将它们串在一起形成一个"连续的空闲条目"列表,然后将它们分发出去。根据需要分配另一个满的区域。使用一些不太干净的技巧,您最终可以重新线性化释放的条目,等等。
但是,大多数情况下,实际上不值得做所有这些工作。
每个链表元素可以有多个条目,即每个元素中有一个小数组的条目。这允许缓存一些条目,同时仍然保持列表的动态特性。
这是一个展开列表,给你你想要的。
可以让链表的一个元素包含多个数据条目。例如:
struct myll{
int data[16];
char valid[16/8];
struct myll* next;
}
这样,您将粒度设置为每个节点16个条目。但是,您仍然可以使用另一个节点&使用"valid"标志删除。实现起来有点痛苦,但这取决于您的需求。
我想,有些文件系统也使用了类似的机制
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 错误:需要类名(链表c++)
- 为什么C中的通用链表中存储的数据已损坏
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表c++插入,所有情况都已检查,但没有任何工作
- 链表,将列表复制到另一个列表
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 缓存链表——这是可能的吗?