2010-06-10 13 views
5

C'è un sovraccarico significativo di CPU/memoria associato all'uso di array automatici con g ++/Intel su piattaforma x86 a 64 bit x86?Prestazioni automatiche dell'array di lunghezza variabile C99

int function(int N) { 
    double array[N]; 
  • ambientale rispetto ad assegnare matrice prima mano (funzione supponendo viene chiamato più volte)

  • ambientale rispetto all'utilizzo nuovo

  • ambientale rispetto all'utilizzo malloc

L'intervallo di N può essere da 1kb a 16kb all'incirca, lo stack overrun non è un problema.

+2

Che cosa si intende per gli array automatici? – AraK

+0

overhead rispetto a cosa? – sth

+3

Penso che stia parlando degli array di lunghezza variabile che sono stati aggiunti a C nella revisione C99 della lingua. È corretto aaa? –

risposta

6

La differenza di prestazioni tra un VLA e un array di dimensioni statiche dovrebbe essere trascurabile. Potresti aver bisogno di alcune istruzioni extra per calcolare quanto far crescere lo stack, ma quello dovrebbe essere il rumore in qualsiasi programma reale.

Hmm, su ulteriore pensiero, potrebbe anche esserci un sovraccarico a seconda di come le variabili locali sono disposte in memoria e se ci sono più VLA.

Considerare il caso in cui si hanno i locals (e si presuppone che vengano messi in memoria nell'ordine in cui sono specificati).

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

Ora, ogni volta che è necessario accedere arr2, il codice ha bisogno di calcolare la posizione di arr2 relativa al vostro puntatore base.

+0

grazie. quello era il mio istinto, volevo solo essere doppiamente sicuro. per fortuna, devo solo preoccuparmi del singolo array VLA – Anycorn

0
  • Review l'uscita di montaggio
  • Profilo di esso, per la vostra applicazione
  • controllare l'utilizzo della memoria
Problemi correlati