Например, я хочу создать функцию (insertNode
), которая добавляет узлы в список. Быстрее ли вызывать insertNode
каждый раз, когда я хочу добавить узел, или сохранить все узлы в массиве, и вызвать один раз insertNode
, передав массив в качестве аргумента и позвольте функции делать все остальное? ПримерОптимизация (на языке C): многие вызовы функций vs Один вызов функции
Код:
typedef struct Data {
int *myArray; //the array where all integers are stored
int firstAvailablePos; //the first free position of myArray
} Data;
insertNode(Data *data, int newNum) {
(data->myArray)[data->firstAvailablePos] = newNum;
(data->firstAvailablePos)++;
}
alt_insertNode(Data *data, int *array, int arraySize) {
int i;
for(i = 0; i < arraySize; i++)
(data->myarray)[i] = array[i];
}
И в main
два варианта:
Многие вызовы функций
while (...) { ... insertNode(data, newNum); }
Один вызов функции
anArraySize = 0; while (...) { ... anArray[i] = newNum; anArraySize++; ... } alt_insertNode(data, anArray, anArraySize);
Публикация кода на 2 подходов будет генерировать более конкретную обратную. – chux
Это зависит от индивидуальной стоимости добавления одного элемента в список, для каждого способа, который вам нужно выбрать. Вы можете это измерить? Или отправьте код и рассчитать сложность. –
Я думаю, что вызов каждый раз в этом случае будет более оптимизирован, потому что если вы поместите их в массив (это назначить операцию + найти пустую), тогда, когда вы получите полную таблицу, вы вызываете функцию, которая вставляет узлы, которые в конечном итоге будут быть той же функцией, что и в первом варианте, но с большим циклом. – koper89