SORU
11 Aralık 2010, CUMARTESİ


() işlev, hedef'in vs hedef()

Ben anlamaya çalışıyoruz arasındaki fark memcpy() memmove(), ve ben okuma metni memcpy() gelmez bakmaya örtüşen kaynak ve hedef ise memmove() yapar.

Bellek blokları üst üste binen bu iki işlevi idam ederim, ancak her ikisi de aynı sonucu verir. Örneğin, memmove() yardım şu Web örnek al: - sayfa

Daha iyi bir örnek memmove nasıl çözeceğini memcpy sakıncaları ve anlamak var mı?

// crt_memcpy.c
// Illustrate overlapping copy: memmove always handles it correctly; memcpy may handle
// it correctly.

#include <memory.h>
#include <string.h>
#include <stdio.h>

char str1[7] = "aabbcc";

int main( void )
{
    printf( "The string: %s\n", str1 );
    memcpy( str1   2, str1, 4 );
    printf( "New string: %s\n", str1 );

    strcpy_s( str1, sizeof(str1), "aabbcc" );   // reset string

    printf( "The string: %s\n", str1 );
    memmove( str1   2, str1, 4 );
    printf( "New string: %s\n", str1 );
}

Çıkış:

The string: aabbcc
New string: aaaabb
The string: aabbcc
New string: aaaabb

CEVAP
11 Aralık 2010, CUMARTESİ


Tamamen örnek yok garip davranışlar sergiler şaşırmadım. str1 2 str1 yerine kopyalama ve daha sonra ne olacağını görürsün. (Aslında bir fark yaratmak, derleyici bağlıdır/kitaplıkları).

Genel olarak, işlev, hedef'in bir basit (ama hızlı bir şekilde) uygulanır. Basitçe, sadece veri (sırayla), başka bir yerden kopyalama döngü tekrar. Bu kaynak okuma kullanırken üzerine neden olabilir.

Hedef doğru üst üste işlediği sağlamak için daha fazla çalışır.

DÜZENLEME:

(ne yazık ki, iyi örnekler bulamıyorum, ama bu da aynı işi görür). Kontrast memcpy memmove uygulamaları burada gösterilir. memcpy sadece hedef veri bozulmasını önlemek için döngü belirlemek için test ederken döngüler. Bu uygulamalar oldukça basit. En yüksek performans uygulamaları daha karmaşık (kopyalama word boyutunda bir zamanda blokları yerine bayt içeren).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Anthony

    Eric Anthony

    13 AĞUSTOS 2011
  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007
  • Krumme1996

    Krumme1996

    21 EYLÜL 2009

İLGİLİ SORU / CEVAPLAR