Q&A

  • CopyMemory() 함수를 사용해 보신 분계세요???(급)
델파이를 사용하는 홍진혁입니다.



다름아니고, A 포인터에서 B 포인터로 C 바이트만큼 복사를 하려고 하는데

CopyMemory(B, A, C)를 사용하였습니다.



그런데, CopyMemory함수의 속도를 잘 모르겠습니다.

어떤 분은 Move()가 비슷한 기능을 하는데 속도는 아주 느리다고 하구요.

C에서 memcpy() 함수는 몇백만 Byte를 복사하는데 시간이 거의 몇 msec 정도 걸립니다.

혹시 CopyMemory()는 어느정도 속도가 걸리는지 경험해 보신분 계십니까????



1  COMMENTS
  • Profile
    도지성 2001.05.12 20:17
    홍진혁 wrote:

    > 델파이를 사용하는 홍진혁입니다.

    >

    > 다름아니고, A 포인터에서 B 포인터로 C 바이트만큼 복사를 하려고 하는데

    > CopyMemory(B, A, C)를 사용하였습니다.

    >

    > 그런데, CopyMemory함수의 속도를 잘 모르겠습니다.

    > 어떤 분은 Move()가 비슷한 기능을 하는데 속도는 아주 느리다고 하구요.

    > C에서 memcpy() 함수는 몇백만 Byte를 복사하는데 시간이 거의 몇 msec 정도 걸립니다.

    > 혹시 CopyMemory()는 어느정도 속도가 걸리는지 경험해 보신분 계십니까????

    >



    직접 만들어 보시면 금방 알수 있을텐데요..



    uses

    mmSystem;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    i : integer;

    StartTime : DWORD;

    Elapsed : DWORD;

    SourBuf : array[0..10000] of byte;

    DestBuf : array[0..10000] of byte;

    begin

    StartTime := timeGetTime;



    for i := 0 to 100000 do begin

    CopyMemory( @DestBuf, @SourBuf, 10000 );

    end;



    Elapsed := timeGetTime - StartTime;



    ShowMessage( IntToStr( Elapsed ) );



    StartTime := timeGetTime;



    for i := 0 to 100000 do begin

    Move( SourBuf, DestBuf, 10000 );

    end;



    Elapsed := timeGetTime - StartTime;



    ShowMessage( IntToStr( Elapsed ) );

    end;





    이것을 실행 해보면 어느것이 얼만큼 빠른지 알 수 있을 겁니다..



    그리고..



    #include "windows.h"

    #include "mmsystem.h"



    int main(int argc, char* argv[])

    {

    int i;

    DWORD StartTime, Elapsed;

    char SourBuf[10000], DestBuf[10000];





    StartTime = timeGetTime();



    for ( i = 0; i < 100000; i++ )

    {

    memcpy( DestBuf, SourBuf, 10000 );

    }



    Elapsed = timeGetTime() - StartTime;



    printf( "memcpy : %d msecn", Elapsed );





    StartTime = timeGetTime();



    for ( i = 0; i < 100000; i++ )

    {

    CopyMemory( DestBuf, SourBuf, 10000 );

    }



    Elapsed = timeGetTime() - StartTime;



    printf( "CopyMemory : %d msecn", Elapsed );



    return 0;

    }



    이 소스를 실행하면 VC++ 에서 memcpy 와 CopyMemory 의

    속도도 비교 하실 수 있을 겁니다..



    참고로 제 PC 에서는 같은 Win32 API 인 CopyMemory 라고 하더라도

    VC++6.0 에서는 10000 * 100000 bytes 복사하는데 2866 msec 이고..

    Delphi 3.0 에서는 3747 msec 가 걸렸습니다..



    호출 방식도 같은데.. Delphi 가 1.3 배 더 많이 걸리죠 ?

    이 이유는 숙제입니다....