我有一個函數需要一個字符串數組(緩衝區)並需要增加它的大小。 因此,我調用realloc的分配字符串數組的最快方法
temp = (char**) realloc (buffer, newSize * (sizeof(char*)));
if (temp == NULL)
return false;
else
buffer = temp;
因此到目前爲止,一切都很好。現在對於每個新的單元格,我都必須調用正確大小的malloc。注意newSize總是偶數,並且奇數字符串的長度與偶數字符串的長度不同。
for (i = oldSize; i < newSize; i++){
support = (char*) malloc (LENGTH1 * sizeof(char));
if (support == NULL){
marker = i;
failedMalloc = true;
break;
}
else
buffer[i] = support;
i++;
support = (char*) malloc (LENGTH2 * sizeof(char));
if (support == NULL){
marker = i;
failedMalloc = true;
break;
}
else
buffer[i] = support;
}
事實是,自從我與海量數據的工作我遲早會完成內存和realloc的或mallocs將失敗之一。問題是,如果它是malloc中的一個,那麼失敗的風險是我必須自由調用百萬來清除一些內存。這需要很長時間。有什麼辦法可以加速這個過程,甚至更好地避免它?
if (failedMalloc){
for (i = oldRows; i < marker; i++)
free(buffer[i]);
temp = (char**) realloc (buffer, oldRows * (sizeof(char*)));
}
PS:是的我知道指針算術比數組索引更快。當我找到解決這個問題的方法時,我會實現它,因爲我更喜歡使用數組索引,因爲我覺得它不太容易出錯。但最終版本將使用指針算術
指針的運算速度不及數組索引 – sth
@sth,我在基準測試中發現了同樣的情況 - x86架構在指令級別內置了索引,所以如果您正在循環索引你可以免費得到它。 –
@sth:什麼架構? –