【发布时间】:2011-06-30 08:05:22
【问题描述】:
我需要对可以存储混合类型数据(包括各种类型的指针)的瞬态数组(在堆栈上和/或在堆中)进行高性能迭代。
我想过使用联合来确定几个受支持的数组成员的最大大小。
以下是最快(安全)的架构和解决方案吗?
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 循环在除空终止之外的错误检查方面可能非常少。
【问题讨论】:
-
没关系。不过,请考虑完全抽象您的数组,使用函数来访问联合并返回适当的类型。
-
对的第二个值的类型,是从对的第一个值的含义推断出来的。在第一个值的枚举上使用 switch 查找将非常精简。
-
抽象是个好主意,但在这种情况下,我真的要追求性能。
标签: c arrays performance pointers primitive-types