2014-02-06 53 views
0

我一直在尋找一些測量延遲的代碼,以及我遇到的方法之一,它們遍歷一個僅限於動態分配內存空間的鏈表。我理解傳統的鏈表很好,我理解動態分配的數組,但把它們放在一起就是讓我通過一個循環。這可能看起來像是一個相對基本的問題,但我對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

如何看待它:而不是使用malloc對於每個列表項目,您改爲使用您自己的自定義分配器。這個自定義分配器將從數組中分配項目(列表項)。數組中的每個項目(在本例中)都是128個字節。換句話說,如果你知道如何用malloc解決這個問題,只需用my_malloc替換malloc即可。 – jdigital

+0

@jdigital每個項目不是128個字節。每個塊都是128 * sizeof(char *)',所以除非你的指針每個都是1個字節(它們不是),這些段不是128個字節長。 – WhozCraig

+0

@WhozCraig使項目大小無論你想要的,'128 * sizeof(char *)'是好的,如果這是你想要的。你正在閱讀代碼,我正在閱讀英文;-) – jdigital

回答

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; 
}