Czy wielokrotne realokacje są droższe niż ogromny malloc?
Używam dynamicznej tablicy do reprezentowania sterty min. Istnieje pętla, która usuwa minimum i dodaje losowe elementy do min-sterty, dopóki nie wystąpi jakiś warunek. Chociaż nie wiem, jak zmieni się długość sterty w czasie wykonywania (jest dużo losowości), znam górną granicę, która wynosi 10 milionów. Mam dwie opcje:
1) Zadeklaruj małą tablicę za pomocą malloc, a następnie wywołaj realloc, gdy liczba elementów w stercie przekracza długość.
2) Zadeklaruj 10 milionów tablic wejściowych za pomocą malloc. W ten sposób unika się wywoływania ponownego połączenia.
Pytanie
Czy opcja 2 jest bardziej wydajna niż opcja 1?
Przetestowałem to z moim kodem i wydaje się, że znaczna (20%) redukcja czasu wykonania od użycia 2. Jest to szacowane ze względu na losowość kodu. Czy jest jakaś wada deklarowania dużej 10-50 milionów tablic wejściowych z malloc z przodu?