2016-05-28 8 views
3

J'ai un tableau d'octets que je veux compresser. (Taille 400 octets sur avg) .J'ai deux options.Je conserve un tableau de 400 octets et bourrer bits.Enfin dis que la taille compressée est de 300 octets, donc j'utilise memcpy pour copier ces octets dans un tableau de taille 300 et envoyer. Sinon je peux garder un vecteur et réserver 400 octets et utiliser push_back (ici je peux éviter le memcpy). Je reçois un très grand nombre de tableaux par seconde. Donc, dans un scénario de performance critique, quel choix donnera de meilleures performances?allocation de tableau suivie par memcpy ou vector avec réserve?

+0

On ne sait pas exactement ce que vous voulez faire. Dites que vous avez un vecteur et remplissez-le avec 'push_back'. Utilisez-vous _that_ vector alors? Si vous avez déjà un tableau de 300 éléments, pourquoi utiliser 'memcpy'? –

+0

Si j'avais un très grand nombre de tableaux par seconde, je préférerais personnellement la méthode 'resize' à' reserve '. Cela semble plus rapide. –

+0

Je dois envoyer le tableau compressé.Alors je copie les octets qui font partie des données compressées pas le tableau complet que j'ai alloué pour les tenir (car je ne connais pas la taille apriori) @polfsol –

Répondre

2

S'il doit être rapide, vous ne voulez certainement pas push_back chaque octet individuel un à la fois; vous voulez effectuer un transfert groupé, comme le fait memcpy. Mais vous pouvez utiliser std::copy, qui devrait être tout aussi efficace. Pour les types primitifs tels que char ou int, l'utilisation de std::vector avec std::copy est essentiellement une couche au-dessus d'une matrice brute et memcpy.