2010-06-10 4 views
5

Y a-t-il un surcoût important de mémoire/cpu associé à l'utilisation de baies automatiques avec g ++/Intel sur une plate-forme Linux 64 bits x86?Performances de la matrice automatique de longueur variable C99

int function(int N) { 
    double array[N]; 
  • de tête par rapport au réseau allouant avant la main (fonction supposant est appelée plusieurs fois)

  • de tête par rapport à l'utilisation de nouvelles

  • de tête par rapport à l'utilisation de malloc

La gamme de N mai être de 1kb à 16kb environ, le dépassement de pile n'est pas un problème.

+2

Que voulez-vous dire par des réseaux automatiques? – AraK

+0

frais généraux par rapport à quoi? – sth

+3

Je pense qu'il parle des tableaux de longueur variable qui ont été ajoutés à C dans la révision C99 du langage. Est-ce correct aaa? –

Répondre

6

La différence de performance entre un VLA et un réseau de taille statique devrait être négligeable. Vous aurez peut-être besoin de quelques instructions supplémentaires pour calculer la croissance de la pile, mais cela devrait être du bruit dans tout vrai programme. Hmm, à la réflexion, il pourrait aussi y avoir un surdébit en fonction de la disposition des variables locales en mémoire et de l'existence de plusieurs VLA. Considérons le cas où vous avez les locals (et supposons qu'ils sont mis en mémoire dans l'ordre indiqué).

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

Maintenant, chaque fois que vous avez besoin d'accéder arr2, le code doit calculer l'emplacement de arr2 par rapport à votre pointeur de base.

+0

merci. C'était mon instinct, je voulais juste être doublement sûr. Heureusement, je n'ai qu'à m'inquiéter du tableau VLA – Anycorn

0
  • Examinez la sortie de l'ensemble
  • Profil il, pour votre application
  • Vérifiez votre utilisation de la mémoire
Questions connexes