连续内存空间中的链表

时间:2014-02-06 02:50:53

标签: c arrays dynamic linked-list

我一直在研究一些用于测量延迟的代码,我遇到的一种方法涉及迭代一个仅限于动态分配的内存空间的链表。我很了解传统的链接列表,我理解动态分配的数组,但将两者放在一起会让我经历一个循环。这似乎是一个相对基本的问题,但我对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;
}

嗯这对我来说甚至都没有用,我似乎无法找出原因。是否有任何关于正确实施此方法或我可能做错的方法的建议?

1 个答案:

答案 0 :(得分:1)

在这个问题上没有多少叮咬,但我仍然认为它是一个有用的问题所以我会发布我做的!

要在动态分配的空间中创建带有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;
}