Функция нуждается в собственном массиве для рабочего пространства - передовой опыт?

Предположим, что функция

void foo(int n, double x[])

сортирует n-вектор x , выполняет некоторые операции с x , а затем восстанавливает исходный порядок на x перед возвратом. Итак, внутри foo требуется какое-то временное хранилище, например, по крайней мере, n-вектор целых чисел, чтобы сохранить исходный порядок.

Как лучше всего справиться с этим временным хранилищем? Я могу придумать два очевидных подхода:

  1. foo объявляет собственное рабочее пространство, объявляя внутренний массив, т.е. в верхней части foo у нас есть

     int temp [n];
     
  2. в основной процедуре вызова динамически выделять n-вектор целых чисел один раз и передавать хранилище при каждом вызове версии foo , которая принимает временное хранилище в качестве третьего аргумента, т. Е.

     double * temp = malloc (n * sizeof (double));
    foo (n, x, temp);
     

Меня беспокоит, что вариант 1 неэффективен (функция foo будет вызываться много раз с тем же n ), а вариант 2 просто просто уродливо, так как мне приходится носить с собой это временное хранилище, чтобы оно всегда было доступно везде, где мне понадобится вызов foo (n, x) .

Есть ли другие более элегантные варианты?

5
задан Michael 3 July 2011 в 13:49
поделиться