英文:
Search a value in array of structures C
问题
如果我只是获取fault_code
,如何在fault_table
中搜索这个值。谢谢。
英文:
I would like to know the fastest search method for array of structures
typedef struct fault_table_type {
fault_types_t fault_code;
faultmanger_time_ process_time;
fault_behavior_enum_type_t behavior;
FAILUREMGR_ACTION fault_action;
bool forward_fault;
} fault_table_type_t;
static const fault_table_type_t fault_table[] = {
{ COMMS_FAILURE, 60, BEHAVIOR_3, FAIL, false,},
{ QUEUE_FAILURE, 10, BEHAVIOR_1, RESET, true},
};
If I am just getting the fault_code
. How do I search this value in the fault_table. Thanks
答案1
得分: 1
线性搜索通过一个好老式的for
循环。编译器可能会为您展开循环。如果没有,请编写一个宏来检查索引i并为您的两个记录调用它。您可以尝试lfind()
,但由于函数调用开销,它可能会稍微慢一些。
下一步(如果您有1000个以上的记录)是对键进行排序,可以是数组本身或一个单独的索引,然后使用bsearch()
。如果您从结构数组更改为数组的结构,则您的键已经排序并用作索引。
无论哪种情况,您首先从为可读性优化的代码开始。进行基准测试,然后查看是否需要进行更改。您还需要更精确地确定"最快"的含义是什么:最少的CPU周期、最少的缓存未命中、访问模式(冷热)、用户时间等。
英文:
Linear search via a good old for
-loop. The compiler will probably unroll the loop that for you. If not write a macro to check index i and call it for your 2 records. You could try lfind()
but it will probably be a little slower just due to function call overheads.
The next step (if you have 1000+ records) is to sort your key either the array itself array or a separate index then use bsearch()
. If you change from an array of struct to a struct of arrays then your key is sorted and serves as an index.
In either case you start with code optimized for readability. Benchmark it and then see if you need to make changes. You also want to be more precise what you mean with fastest mean: fewest cpu cycles, fewest cache misses, what access pattern (cold vs hot), user time etc.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论