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

  • EEVblog2

    EEVblog2

    2 HAZÄ°RAN 2014
  • glowpinkstah

    glowpinkstah

    16 Mayıs 2006
  • martin shervington

    martin sherv

    7 EKÄ°M 2011