Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <Windows.h>
- #include <time.h>
- using namespace std;
- ULONGLONG Ticks64 = NULL;
- void StartCounter( )
- {
- Ticks64 = GetTickCount64( );
- }
- ULONGLONG GetCounter( )
- {
- return GetTickCount64( ) - Ticks64;
- }
- const int sizeofbigdata = 209715200;
- unsigned char * bigdata;
- unsigned char * bigdata2;
- void check1( )
- {
- memcpy( bigdata, bigdata2, sizeofbigdata );
- }
- void check2( )
- {
- copy( bigdata2, bigdata2 + sizeofbigdata, bigdata );
- }
- unsigned char __cdecl randbyte( )
- {
- return rand( ) % 0xFF;
- }
- void FillMemoryRandomData( )
- {
- unsigned char tmpBuffer[ 4096 ];
- unsigned char tmpBuffer2[ 4096 ];
- std::generate( tmpBuffer, tmpBuffer + 4096, randbyte );
- std::generate( tmpBuffer2, tmpBuffer2 + 4096, randbyte );
- unsigned char * tmpbigdata = bigdata;
- while ( tmpbigdata < bigdata + sizeofbigdata )
- {
- memcpy( tmpbigdata, tmpBuffer, 4096 );
- tmpbigdata += 4096;
- }
- tmpbigdata = bigdata2;
- while ( tmpbigdata < bigdata2 + sizeofbigdata )
- {
- memcpy( tmpbigdata, tmpBuffer2, 4096 );
- tmpbigdata += 4096;
- }
- }
- int main( )
- {
- srand( time( nullptr ) );
- std::cout << "Init two arrays.\n";
- bigdata = ( unsigned char * )VirtualAlloc( NULL, sizeofbigdata, MEM_COMMIT, PAGE_READWRITE );
- bigdata2 = ( unsigned char * )VirtualAlloc( NULL, sizeofbigdata, MEM_COMMIT, PAGE_READWRITE );
- std::cout << "Use VirtualLock.\n";
- VirtualLock( bigdata, sizeofbigdata );
- VirtualLock( bigdata2, sizeofbigdata );
- std::cout << "Ok. Fill memory with random data.\n";
- FillMemoryRandomData( );
- std::cout << "Ok. Start memcpy test.\n";
- StartCounter( );
- for ( int i = 100; i--; )
- check1( );
- std::cout << ( GetCounter( ) / 1000 ) << " sec" << std::endl;
- std::cout << "Ok. Fill memory with random data.\n";
- FillMemoryRandomData( );
- std::cout << "Ok. Start std::copy test.\n";
- StartCounter( );
- for ( int i = 100; i--; )
- check2( );
- std::cout << ( GetCounter( ) / 1000 ) << " sec" << std::endl;
- std::cout << "End.\n";
- system( "pause" );
- return 0;
- }
- /*
- Result in Visual Studio 2017 with optimizes enabled. (Max performance)
- memcpy 15 sec
- std::copy 8 sec
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement