Diziler veya std::kullanma C , ne'performans farkının s?vektörler | Netgez.com
SORU
19 Aralık 2008, Cuma


Diziler veya std::kullanma C , ne'performans farkının s?vektörler

C Rotamız yeni projeler üzerinde C diziler artık kullanmamanızı öneririm. Stroustroup bildiğim kadarıyla diziler kullanmamayı kendini gösteriyor. Ama ciddi performans farkı var mıdır?

CEVAP
19 Aralık 2008, Cuma


new C diziler (dinamik diziler kullanarak) kullanımından kaçınılmalıdır. Boyutu takip etmek sorun var, ve bunları el ile silin ve temizlik her tür yapmak gerekir.

Üzerinde dizileri kullanarak yığını da denetleme aralığı yok çünkü cesareti ve çevresinde dizinin geçen büyüklüğü (işaretçi dönüşüm dizi) hakkında herhangi bir bilgi kaybedersiniz. Küçük bir sınıf C bir dizi sarar ve size İşlev ve kullanımına üzerinden yineleme sağlayan bu durumda, boost::array kullanmalısınız.

Şimdi::std vektör C vs yerli diziler(internetten alınan):

// Comparison of assembly code generated for basic indexing, dereferencing, 
// and increment operations on vectors and arrays/pointers.

// Assembly code was generated by gcc 4.1.0 invoked with  g   -O3 -S  on a 
// x86_64-suse-linux machine.

#include <vector>

struct S
{
  int padding;

  std::vector<int> v;
  int * p;
  std::vector<int>::iterator i;
};

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

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

// Conclusion: Indexing a vector is the same damn thing as indexing a pointer.

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

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

// Conclusion: Dereferencing a vector iterator is the same damn thing 
// as dereferencing a pointer.

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

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

// Conclusion: Incrementing a vector iterator is the same damn thing as 
// incrementing a pointer.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Branboy3

    Branboy3

    12 AÄžUSTOS 2012
  • Britec09

    Britec09

    4 Mart 2009
  • MVLV28

    MVLV28

    17 Mart 2008