我一直在研究一些用于测量延迟的代码,我遇到的一种方法涉及迭代一个仅限于动态分配的内存空间的链表。我很了解传统的链接列表,我理解动态分配的数组,但将两者放在一起会让我经历一个循环。这似乎是一个相对基本的问题,但我对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;
}
嗯这对我来说甚至都没有用,我似乎无法找出原因。是否有任何关于正确实施此方法或我可能做错的方法的建议?
答案 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;
}