gpt4 book ai didi

c - C中如何通过list改进迭代?

转载 作者:行者123 更新时间:2023-12-02 06:56:40 25 4
gpt4 key购买 nike

我有自己的模拟堆 block 的数据结构。

typedef struct heap_block
{
struct heap_block* next;
size_t size;
bool isfree;
} header;

我有一个遍历我的数据结构的方法(它就像一个列表):

void craw(header* crawler, bool isfree, int* counter)
{
while(crawler->next != NULL)
{
if(crawler->isfree == isfree)
{
++(*counter);
}

crawler = crawler->next;
}

if(crawler->isfree == isfree)
{
++(*counter);
}
}

我需要使用额外的检查,因为最后一个元素有 crawler->next == NULL

如何改进这个迭代?

最佳答案

如果您正在寻找性能改进,那么如果不实际分析发布版本中的代码就很难说。优化器可以做你做梦也想不到的事情。也就是说,您可以做的一件事是不要在每次迭代时取消引用计数器。没有任何内容表明它的内存将与其余取消引用的列表数据一起分页,因此在每次迭代中取消引用它可能会进行昂贵的获取。相反,在迭代开始之前分配一个本地计数器,在每次迭代时增加它并在返回之前分配取消引用的计数器参数。

void craw(header* crawler, bool isfree, int* counter)
{
int local_counter = *counter; // assuming counter != 0

... iterate ...
local_counter++;

*counter = local_counter;
}

关于c - C中如何通过list改进迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893392/

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