gpt4 book ai didi

c - 最快的多类型数组解决方案?

转载 作者:行者123 更新时间:2023-11-30 18:05:21 26 4
gpt4 key购买 nike

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

我考虑使用 union 来确定几个受支持的数组成员的最大大小。

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

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 循环在除空终止之外的错误检查方面可能相当少。

最佳答案

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

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

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

关于c - 最快的多类型数组解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6531770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com