gpt4 book ai didi

c - 连续内存空间中的链表

转载 作者:行者123 更新时间:2023-11-30 15:39:05 25 4
gpt4 key购买 nike

我一直在研究一些用于测量延迟的代码,我遇到的方法之一涉及迭代仅限于动态分配的内存空间的链接列表。我非常了解传统的链表,也了解动态分配的数组,但是将两者放在一起会让我陷入循环。这可能看起来是一个相对基本的问题,但我不太擅长 c,并且出于某种原因我很难构建它。

我想跨步 128 字节,所以我尝试执行以下操作(我知道我可能离基地很远,但我需要从某个地方开始)

char** randomArray = malloc(accessSize);    //allocate space for linked list
char** start=randomArray; //header for base adress
char** iterate; //iterator
char** end =randomArray+accessSize; //end address
for(iterate=start; iterate < end; iterate+=128){
*iterate = iterate+128; //step through in strides of 128 bytes, assign next addr to current value
}

*iterate=start; //linked list is circular, assign last element to first

我不知道要指向什么数据类型,通常您会为结构分配空间,但该空间已经存在。

然后我想我会按如下方式迭代它

for(counter = 0; counter < LotsOfAccess; counter++){
start = (char**) *start;
}

嗯,这对我来说甚至没有一点作用,我似乎无法找出原因。有没有人对实现此目的的正确方法有任何建议,或者我可能做错了什么?

最佳答案

好吧,这个问题并没有引起太多兴趣,但我仍然认为这是一个有用的问题,所以我会发布我所做的事情!

为了在动态分配的空间中创建步长为 128 字节的链表,我这样做了:

char * randomArray = malloc(accessSize*sizeof(char));
int counter;
char ** head = (char **) randomArray;
char ** iterate = head;
for(counter=0; counter < accessSize; counter+=128){
(*iterate) = &randomArray[counter+128];
iterate+=(128/sizeof iterate);
}
*iterate = head;

为了遍历我所做的:

iterate = head;   
for(counter=0; counter < NUM_ACCESSES; counter++){
iterate = *iterate;
}

关于c - 连续内存空间中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21593064/

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