Murilo :P

C++, Computação, Programação, Web e afins :)

Comparação de desempenho: std::vector vs Array

with 4 comments

C++Comparação entre os códigos assembly gerados para operações de indexação básica, dereferenciação eincremento em std::vectors e arrays/ponteiros.

O código assembly foi gerado pelo gcc 4.1.0 chamado com g++ -03 -S em uma máquina x86_64-suse-linux.

#include 

struct S
{
  int padding;

  std::vector v< int >;            //nosso vector
  int * p;                    //nosso ponteiro
  std::vector< int >::iterator i; //iterador do vector
};

int indexar_ponteiro(S & s) { return s.p[3]; }
  // movq    32(%rdi), %rax
  // movl    12(%rax), %eax
  // ret

int indexar_vector(S & s) { return s.v[3]; }
  // movq    8(%rdi), %rax
  // movl    12(%rax), %eax
  // ret

// Conclusão: Indexar um std::vector é a mesma coisa de indexar um ponteiro.

int deref_ponteiro(S & s) { return *s.p; }
  // movq    32(%rdi), %rax
  // movl    (%rax), %eax
  // ret

int deref_iterador(S & s) { return *s.i; }
  // movq    40(%rdi), %rax
  // movl    (%rax), %eax
  // ret

// Conclusão: Dereferenciar um std::vector é a mesma coisa de dereferenciar um ponteiro.

void incrementar_ponteiro(S & s) { ++s.p; }
  // addq    $4, 32(%rdi)
  // ret

void incrementar_iterador(S & s) { ++s.i; }
  // addq    $4, 40(%rdi)
  // ret

// Conclusão: Incrementar um iterador de std::vector é a mesma coisa de incrementar um ponteiro.

Ou seja, além das facilidades do std::vector, algumas operações básicas tem o mesmo custo tanto com std::vector quanto um array/ponteiro.

Surpreso?

Advertisements

Written by Murilo Adriano

14 de January de 2009 at 21:57

Posted in Baixo nível, C/C++, Programação

Tagged with , ,

4 Responses

Subscribe to comments with RSS.

  1. Murilo,
    Tem uma thread no TopCoder que tenta comparar array com vector.
    http://forums.topcoder.com/?module=Thread&threadID=632545&start=0&mc=5

    Não li ela.
    Abraço.

    Andre Brito

    27 de February de 2009 at 00:52

  2. Muito surpreso valew.

    newbie_x11

    1 de March de 2009 at 11:16

  3. […] Um último exemplo é o sort, que em C++ é mais rápido, mesmo quando as duas implementações usam o mesmo algoritmo de ordenação. Quer usar baixo-nível para não adicionar gargalo nenhum? É a mesma coisa! […]

  4. […] Também tem posts negando mitos, dando destaque a esse aqui. […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: