假设我有一个以unsigned int
;为键的关联数组 值可以是任何固定大小的类型。有一些预定义的最大数量。的实例。
API 使用示例:MyStruct * valuePtr = get(1234);
和put(6789, &myStructInstance);
...基本。
当我从这个数组中快速随机读取条目时,我想尽量减少缓存未命中,所以我预先malloc(sizeof(MyType) * MAX_ENTRIES)
尽可能确保引用的局部性。
泛型对于 values 数组很重要。我看过C pseudo-generics,但void *
为了简单起见更喜欢;但是,不确定这是否与性能目标不一致。最终,我想知道什么最适合性能。
我应该如何实现关联数组以提高性能?到目前为止的想法...
- 我是否将关联数组传递
void *
给 ed values 数组的单个指针malloc
并允许它在内部使用它(为此我们需要保证匹配的键数组大小)?我可以一般地这样做吗,因为需要知道类型(?)才能索引到值数组? - 我是否
void * valuePtrs[]
在关联数组中有一个单独的,然后让这些指针指向malloc
ed values 数组中的每个元素?这似乎可以避免需要了解具体类型? - 我是否使用C 伪泛型并因此允许
get()
返回特定的值类型?当然,在这种情况下,唯一的好处是不必显式转换,例如MyStruct* value = (MyStruct*) get(...)
......数组元素仍然必须被取消引用,因此具有相同的开销?
而且,一般来说,上述最小化 cahce 未命中的方法似乎有意义吗?