Não trava.
A memória é do OS, se tem 4Gib, e precisar de mais, o OS faz uso do cache em HD, isso é um problema do OS não do HB.
Por isso a importância de rodar em 64Bits coisa que o Harbour já faz há algum tempo e com ganhos efetivos de performance inclusive usando todos os processadores, coisa que o xHb não faz.
Código: Selecionar todos
Recently I've repeated above tests on the same Hardware but using 64-bit
Linux kernels and 64bit Harbour builds and here the difference is even
bigger. Here are results for ST mode:
2009-10-27 13:24:41 Linux 2.6.31.3-1-desktop x86_64
Harbour 2.0.0beta3 (Rev. 12776) GNU C 4.4 (64-bit) x86-64
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.02
====================================================================
[ T001: x := L_C ]..............................................0.03
[ T002: x := L_N ]..............................................0.02
[ T003: x := L_D ]..............................................0.02
[ T004: x := S_C ]..............................................0.03
[ T005: x := S_N ]..............................................0.03
[ T006: x := S_D ]..............................................0.03
[ T007: x := M->M_C ]...........................................0.03
[ T008: x := M->M_N ]...........................................0.04
[ T009: x := M->M_D ]...........................................0.03
[ T010: x := M->P_C ]...........................................0.04
[ T011: x := M->P_N ]...........................................0.03
[ T012: x := M->P_D ]...........................................0.03
[ T013: x := F_C ]..............................................0.10
[ T014: x := F_N ]..............................................0.17
[ T015: x := F_D ]..............................................0.08
[ T016: x := o:Args ]...........................................0.11
[ T017: x := o[2] ].............................................0.06
[ T018: round( i / 1000, 2 ) ]..................................0.15
[ T019: str( i / 1000 ) ].......................................0.32
[ T020: val( s ) ]..............................................0.18
[ T021: val( a [ i % 16 + 1 ] ) ]...............................0.28
[ T022: dtos( d - i % 10000 ) ].................................0.28
[ T023: eval( { || i % 16 } ) ].................................0.29
[ T024: eval( bc := { || i % 16 } ) ]...........................0.18
[ T025: eval( { |x| x % 16 }, i ) ].............................0.24
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.18
[ T027: eval( { |x| f1( x ) }, i ) ]............................0.27
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.22
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.22
[ T030: x := &( "f1(" + str(i) + ")" ) ]........................2.05
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................2.41
[ T032: x := valtype( x ) + valtype( i ) ].....................0.27
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.54
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.17
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.19
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.18
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.19
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.19
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.18
[ T040: ascan( a, i % 16 ) ]....................................0.22
[ T041: ascan( a, { |x| x == i % 16 } ) ].......................2.01
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.53
[ T043: x := a ]................................................0.02
[ T044: x := {} ]...............................................0.08
[ T045: f0() ]..................................................0.05
[ T046: f1( i ) ]...............................................0.08
[ T047: f2( c[1...8] ) ]........................................0.07
[ T048: f2( c[1...40000] ) ]....................................0.07
[ T049: f2( @c[1...40000] ) ]...................................0.08
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.09
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.21
[ T052: f2( a ) ]...............................................0.08
[ T053: x := f4() ].............................................0.34
[ T054: x := f5() ].............................................0.16
[ T055: x := space(16) ]........................................0.12
[ T056: f_prv( c ) ]............................................0.21
====================================================================
[ total application time: ]....................................15.60
[ total real time: ]...........................................15.61
2009-10-27 13:25:10 Linux 2.6.31.3-1-desktop x86_64
xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6629) GNU C 4.4 (64 bit) ?
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.06
====================================================================
[ T001: x := L_C ]..............................................0.05
[ T002: x := L_N ]..............................................0.03
[ T003: x := L_D ]..............................................0.04
[ T004: x := S_C ]..............................................0.05
[ T005: x := S_N ]..............................................0.03
[ T006: x := S_D ]..............................................0.05
[ T007: x := M->M_C ]...........................................0.05
[ T008: x := M->M_N ]...........................................0.04
[ T009: x := M->M_D ]...........................................0.04
[ T010: x := M->P_C ]...........................................0.06
[ T011: x := M->P_N ]...........................................0.04
[ T012: x := M->P_D ]...........................................0.04
[ T013: x := F_C ]..............................................0.25
[ T014: x := F_N ]..............................................0.17
[ T015: x := F_D ]..............................................0.11
[ T016: x := o:Args ]...........................................0.30
[ T017: x := o[2] ].............................................0.07
[ T018: round( i / 1000, 2 ) ]..................................0.32
[ T019: str( i / 1000 ) ].......................................0.87
[ T020: val( s ) ]..............................................0.32
[ T021: val( a [ i % 16 + 1 ] ) ]...............................0.48
[ T022: dtos( d - i % 10000 ) ].................................0.43
[ T023: eval( { || i % 16 } ) ].................................0.62
[ T024: eval( bc := { || i % 16 } ) ]...........................0.40
[ T025: eval( { |x| x % 16 }, i ) ].............................0.47
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.37
[ T027: eval( { |x| f1( x ) }, i ) ]............................0.66
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.56
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.58
[ T030: x := &( "f1(" + str(i) + ")" ) ]........................5.95
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................6.57
[ T032: x := valtype( x ) + valtype( i ) ].....................0.76
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.90
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.25
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.25
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.24
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.25
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.25
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.24
[ T040: ascan( a, i % 16 ) ]....................................0.46
[ T041: ascan( a, { |x| x == i % 16 } ) ].......................4.10
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.92
[ T043: x := a ]................................................0.04
[ T044: x := {} ]...............................................0.16
[ T045: f0() ]..................................................0.21
[ T046: f1( i ) ]...............................................0.23
[ T047: f2( c[1...8] ) ]........................................0.25
[ T048: f2( c[1...40000] ) ]....................................0.24
[ T049: f2( @c[1...40000] ) ]...................................0.24
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.28
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.41
[ T052: f2( a ) ]...............................................0.24
[ T053: x := f4() ].............................................0.94
[ T054: x := f5() ].............................................0.63
[ T055: x := space(16) ]........................................0.41
[ T056: f_prv( c ) ]............................................0.86
====================================================================
[ total application time: ]....................................37.14
[ total real time: ]...........................................37.16
As we can see in xHarbour we do not have any improvement executing MT
programs on MultiCPU machines while in Harbour the speed is noticeably
better. It means that Harbour is quite well scalable and users should
expect speed improvement executing MT parallel programs on multi CPU
machines. For some programs like MT servers it may be critical - programs
compiled by Harbour can be quite well improved by simple hardware
upgrade to 4, 8, 16 or more CPU machines.
Teste feitos em 2009 pelo Przemek.
Isso também parece não ser importante p/ os usuários do xHarbour.
Saudações,
Itamar M. Lins Jr.