最快的多类阵列解决方案?

时间:2011-06-30 08:05:22

标签: c arrays performance pointers primitive-types

我需要对瞬态数组(在堆栈和/或堆中)进行高性能迭代,它可以存储混合类型的数据,包括各种类型的指针。

我想过使用联合来确定几个支持的数组成员的最大大小。

以下是最快(安全)的架构和解决方案?

union array_sizer {
    void *(* funcPtr)();
    void *dataPtr;
    struct {int i} *strPtr;
    int intVal;
    float floatVal;
}

// create an array of 10 item *pairs*.
union array_sizer *myArray = malloc(22 * sizeof(union array_sizer));

// fill up the (null-terminated) array 

// then, knowing that every *even* item is an int...
for(int i=0; myArray[i].intVal; i+=2){
    //(... do something in loop ...)
}

数组数据将从强制数据完整性的函数创建,因此for循环在错误检查超出空终止时可能非常吝啬。

1 个答案:

答案 0 :(得分:0)

我会创建一个并行的“查找表”,它将索引到原始数组中以说明它是什么类型。因此,创建一个表示类型的枚举,并使其成为相应的数组。

但是,如果你以这种方式查看性能,你会得到页面错误和缓存未命中,因为2个数组可能会在不同的页面上。因此,为了解决这个问题,您需要做的是“数组结构”而不是“结构数组”。为此,创建一个包含2个成员的结构:枚举类型常量和数据本身。如果这样做,当我们获取索引时,它将确保数据和相应的类型信息将在同一页面上。

从高级设计的角度来看,这是我首选的方法。