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;
}
嗯,這甚至沒有稍微對我的工作和我似乎無法找出原因。有沒有任何建議,以正確的方式來實現這個或我可能做錯了什麼?
如何看待它:而不是使用malloc對於每個列表項目,您改爲使用您自己的自定義分配器。這個自定義分配器將從數組中分配項目(列表項)。數組中的每個項目(在本例中)都是128個字節。換句話說,如果你知道如何用malloc解決這個問題,只需用my_malloc替換malloc即可。 – jdigital
@jdigital每個項目不是128個字節。每個塊都是128 * sizeof(char *)',所以除非你的指針每個都是1個字節(它們不是),這些段不是128個字節長。 – WhozCraig
@WhozCraig使項目大小無論你想要的,'128 * sizeof(char *)'是好的,如果這是你想要的。你正在閱讀代碼,我正在閱讀英文;-) – jdigital