我知道数据类型或结构对齐,打包,填充问题等概念。我已经实现了单个链表,其中每个节点占用大约 250 字节,即大约是缓存行 64 字节大小的 4 倍。我的机器是英特尔 64 位架构。
现在,单个链表本质上是一个追踪数据结构的指针,因此遭受了大量缓存未命中。为了减少缓存未命中,我使用 *posix_memalign* 函数将每个数据结构节点对齐,以缓存 64 字节的行边界。现在,所有链表节点都已缓存对齐。
这样做之后,我发现链表的内存消耗大大增加,而且性能实际上也下降了。谁能解释一下可能出现的问题?
我不知道
你用的是什么malloc,但这是来自tcmalloc
// For use by exported routines below that want specific alignments
//
// Note: this code can be slow for alignments > 16, and can
// significantly fragment memory. The expectation is that
// memalign/posix_memalign/valloc/pvalloc will not be invoked very
// often. This requirement simplifies our implementation and allows
// us to tune for expected allocation patterns.