2010-06-10 8 views
5

¿Hay una sobrecarga de CPU/memoria significativa asociada con el uso de matrices automáticas con g ++/Intel en la plataforma Linux de 64 bits x86?C99 rendimiento de matriz automática de longitud variable

int function(int N) { 
    double array[N]; 
  • overhead

    en comparación con la asignación de matriz antes de la mano (función suponiendo que se llama varias veces)

  • overhead comparación con el uso nuevo

  • overhead comparación con el uso malloc

El rango de N puede ser de 1kb a 16kb aproximadamente, el desbordamiento de la pila no es un problema.

+2

¿Qué quiere decir con matrices automáticas? – AraK

+0

gastos generales en comparación con qué? – sth

+3

Creo que está hablando de las matrices de longitud variable que se agregaron a C en la revisión del lenguaje C99. ¿Es eso correcto aaa? –

Respuesta

6

La diferencia en el rendimiento entre un VLA y una matriz de tamaño estático debería ser insignificante. Es posible que necesite algunas instrucciones adicionales para calcular cuánto crecer la pila, pero eso debería ser ruido en cualquier programa real.

Hmm, pensándolo mejor, también podría haber un poco de sobrecarga dependiendo de cómo se ubican las variables locales en la memoria y si hay múltiples VLA.

Considere el caso en el que tiene los locales (y suponga que se almacenan en la memoria en el orden en que se especifican).

int x; 
int arr1[n]; 
int arr2[n]; 

Ahora, cada vez que necesite acceder a arr2, el código necesario para calcular la ubicación de arr2 en relación con el puntero de su base.

+0

gracias. ese era mi instinto, solo quería estar doblemente seguro. Afortunadamente, solo tengo que preocuparme por el solo arreglo VLA – Anycorn

0
  • Revise la salida de montaje
  • perfil en el que, para su aplicación
  • comprobar el uso de memoria
Cuestiones relacionadas