Files
harbour-core/tests/memmgr.prg
vszakats 9687850865 2013-03-16 02:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* (all files)
    * stripped svn header
    * minor cleanups
    ; use following command to find out the history of files:
       git log
       git log --follow
       git blame
       git annotate
2013-03-16 02:11:42 +01:00

107 lines
2.1 KiB
Plaintext

/*
* Harbour Project source code:
* a small memory manager test code
*/
#include "simpleio.ch"
#define N_LOOPS 100000
#ifdef __HARBOUR__
#include "hbmemory.ch"
#endif
PROCEDURE Main()
LOCAL nCPUSec, nRealSec, i, a
#ifdef __HARBOUR__
IF Memory( HB_MEM_USEDMAX ) != 0
?
? "Warning !!! Memory statistics enabled."
ENDIF
#endif
?
? Date(), Time(), Version() + build_mode() + ", " + OS()
?
? "testing single large memory blocks allocation and freeing..."
nRealSec := Seconds()
nCPUSec := hb_SecondsCPU()
FOR i := 1 TO N_LOOPS
a := Space( 50000 )
NEXT
a := NIL
nCPUSec := hb_SecondsCPU() - nCPUSec
nRealSec := Seconds() - nRealSec
? " CPU time:", nCPUSec, "sec."
? "real time:", nRealSec, "sec."
?
? "testing many large memory blocks allocation and freeing..."
nRealSec := Seconds()
nCPUSec := hb_SecondsCPU()
a := Array( 100 )
FOR i := 1 TO N_LOOPS
a[ i % 100 + 1 ] := Space( 50000 )
IF i % 200 == 0
AFill( a, "" )
ENDIF
NEXT
a := NIL
nCPUSec := hb_SecondsCPU() - nCPUSec
nRealSec := Seconds() - nRealSec
? " CPU time:", nCPUSec, "sec."
? "real time:", nRealSec, "sec."
?
? "testing large memory block reallocation with intermediate allocations..."
? "Warning!!! some compilers may badly fail here"
WAIT
nRealSec := Seconds()
nCPUSec := hb_SecondsCPU()
a := {}
FOR i := 1 TO N_LOOPS
AAdd( a, {} )
IF i % 1000 == 0
?? i
ENDIF
NEXT
nCPUSec := hb_SecondsCPU() - nCPUSec
nRealSec := Seconds() - nRealSec
? " CPU time:", nCPUSec, "sec."
? "real time:", nRealSec, "sec."
WAIT
RETURN
FUNCTION build_mode()
#ifdef __CLIP__
RETURN " (MT)"
#else
#ifdef __XHARBOUR__
RETURN iif( hb_MultiThread(), " (MT)", "" ) + ;
iif( Memory( HB_MEM_USEDMAX ) != 0, " (FMSTAT)", "" )
#else
#ifdef __HARBOUR__
RETURN iif( hb_mtvm(), " (MT)", "" ) + ;
iif( Memory( HB_MEM_USEDMAX ) != 0, " (FMSTAT)", "" )
#else
#ifdef __XPP__
RETURN " (MT)"
#else
RETURN ""
#endif
#endif
#endif
#endif
#if __HARBOUR__ < 0x010100
FUNCTION hb_mtvm()
RETURN .F.
#endif