Usar objetos

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

Tem muita briga de LIB, lib isso, lib aquilo, objeto, não objeto.....

E coisa importante, nada....

Uma coisa que nunca saiu da minha cabeça:

Código: Selecionar todos

x := Space(1000000000)
funcao( x )
Isso acima cria a variável grande, e repassa pra função, ocupando o dobro do espaço.

E com classes/objetos ? o que acontece ?
O objeto vai ser multiplicando conforme vai passando por funções ?

Pois é... não importa a lib... é uma informação muito interessante.
Não faço idéia da resposta.

Será que é igual array? que entra como referência automaticamente?
E mesmo array, não é exatamente igual passar variável por referência... talvez seja interessante usar de outro jeito.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Usar objetos

Mensagem por Kapiaba »

Mister Quintas, eu não entendi ONDE ESTÁ o OBJETO neste seu exemplo. Para mim, isto é APENAS uma VARÁVEL LOCAL.

Para mim, OBJETO é isso. Por exemplo:

Código: Selecionar todos


   LOCAL aGet := ARRAY(10), cVar1,,, etc.
   LOCAL oBotao1 // Objeto do Botao 1

   REDEFINE GET aGet[1] VAR cVar2...

   REDEFINE GET aGet[2] VAR cVar3..

   REDEFINE GET aGet[3] VAR cVar4..

   REDEFINE GET aGet[4] VAR cVar5..

   REDEFINE GET aGet[5] VAR cVar6..

   REDEFINE BUTTON oBotao1 ID 301 OF oDlg(objeto do dialogo(etc)
   
etc
Como não entendi o que quisetes dizer, explique-se melhor e o que uma .LIB tem com isso.

So sorry.

Abs.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

O fonte é exemplo de como passar por parâmetro pode gastar muita memória sem se perceber, e o exemplo usa string.

E o que acontece com objetos?

Código: Selecionar todos

x := x():New()
x:y := Space(1000)
funcao( x )
...


CLASS x
   VAR y
   ENDCLASS
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Usar objetos

Mensagem por Kapiaba »

Continuo sem entender onde está o OBJETO no seu exemplo.
Pode por gentileza fazer um EXEMPLO prático explicando o que queres dizer exatamente?
Eu hein....

Isto são objetos:

Código: Selecionar todos

   LOCAL oBtnImp     AS OBJECT
   LOCAL oDlgImp     AS OBJECT
   LOCAL oFnt        AS OBJECT
   LOCAL oFont       AS OBJECT
   LOCAL oSaida      AS OBJECT
   LOCAL oGroup      AS OBJECT
   LOCAL oAprovado   AS OBJECT
   LOCAL oIndeferido AS OBJECT
   LOCAL oPendente   AS OBJECT
   LOCAL oImpGeral   AS OBJECT
   LOCAL oCobrado    AS OBJECT
   LOCAL DeOndeVemImp, aGrad // variaveis comuns.
Regards, saludos.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Usar objetos

Mensagem por Itamar M. Lins Jr. »

Olá!
Continuo sem entender onde está o OBJETO no seu exemplo.
Qualquer coisa é objeto.
Mas quando falamos objeto é pq estamos usando OOP. CLASSES e dentro os MÉTODOS!
Dizer que "VariavelTal as object" é que não quer dizer nada para quem programa.
Qual é a diferença "VariavelTal as object" para "VariavelTal as numeric" ?
Isso é só declaração de variáveis sem conteúdo nenhum.

No exemplo do Quintas o objeto é o X que é uma CLASSE também, entendeu ?
x := X():New() -> x é um objeto que chama a classe X...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

Código: Selecionar todos

#include "inkey.ch"
#include "hbgtinfo.ch"
#include "hbclass.ch"

REQUEST HB_CODEPAGE_PTISO

PROCEDURE Main

   LOCAL nKey := 0, x


   SET EVENTMASK TO INKEY_ALL - INKEY_MOVE
   Set( _SET_CODEPAGE, "PTISO" )

   SetMode(36,132)
   SetColor( "W/B" )
   CLS
   ? Memory(1001)
   x := QualquerClasse():New()
   x:y := Space(100000000)
   ? Memory(1001)
   z( x )
   ? Len( x:y )
   z( x )
   ? Memory(1001)
   hb_ThreadStart( { || DispOut( Memory(1001) ), z( x:y ), DispOut( Memory(1001) ) } )
   hb_ThreadStart( { || DispOut( Memory(1001) ), z( x:y ), DispOut( Memory(1001) ) } )
   hb_ThreadStart( { || DispOut( Memory(1001) ), z( x:y ), DispOut( Memory(1001) ) } )

   DO WHILE nKey != K_ESC
      nKey := Inkey(0)
   ENDDO

   RETURN

CREATE CLASS QualquerClasse
  VAR y
  ENDCLASS

FUNCTION z( x )

   LOCAL k

   k := x

   (k)

   ? Memory(1001)

   RETURN x
test.png
Se alguém conseguir interpretar isso, porque não entendi nada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

Código: Selecionar todos

   ? Memory(THISTEST)
   x := Array(20)
   AFill( x, Space(100000000) )
   ? Memory(THISTEST)

   DO WHILE nKey != K_ESC
      nKey := Inkey(0)
   ENDDO

   RETURN
Ou isso acima.
Uso de 2GB de memória e não faz diferença.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

test.png
Sei lá, não estou entendendo nada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

test2.png
2GB ocupando 100MB ?
Tô ficando doido?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

test.png
10.000 elementos de 100MB, 1.000 GB, em 100MB de memória?
O que estou fazendo de errado?
1 trilhão de bytes.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

testx.png
São 10.000 elementos, salvei um, tá lá no disco com 100MB
10.000 x 100.000.000 = 1 trilhão, é o que mostra lá testando o Len()
Os 10.000 não cabem nem no HD
O limite de memória 32 bits não comportaria isso.
Tô enxergando direito?

Será que o computador tá possuído?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

Alguém pode confirmar esses cálculos?

Como o Harbour pode armazenar 1 TERABYTE de informação em 100 MB de memória ?

Pra mim, se meus cálculos estiverem corretos, algo muito estranho nisso, ainda mais se considerar 32 bits do harbour, que limita uso de memória.

Me veio na cabeça aqueles problemas aleatórios que eu e outras pessoas já comentamos por aqui.

Será que o harbour está misturando tudo quando estoura a memória ?

Por isso tentando entender, e torcendo para meus cálculos estarem errados, ou que exista algum motivo pra isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

Sei lá.... tanto faz o teste....

Código: Selecionar todos

   x := Array(1000000)
   AFill( x, Space(100000000) )
   FOR EACH i IN x
      t += Len( i )
   NEXT
   ? Transform( t, "999,999,999,999,999" )
   hb_MemoWrit( "um.x",x[1] )
1 milhão de elementos de 100MB
100 terabytes, e continua funcionando, e ocupando só 100mb de memória.
Se for assim, salvar toda coleção de filmes em memória e fazer backup da memória.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar objetos

Mensagem por JoséQuintas »

Código: Selecionar todos

   CLS
   DO WHILE nKey != K_ENTER
      x += x
      ? Transform( Len( x ), "9,999,999,999,999,999" )
      nKey := Inkey(1)
   ENDDO
Desse jeito dá erro, por volta de 400mb, não sei dizer direito, porque a janela se fecha.
d:\temp>type hb_out.log
Application Internal Error - d:\temp\test.exe
Terminated at: 2023-07-21 16:00:52
Unrecoverable error 9009: hb_xrealloc can't reallocate memory
Called from MAIN(21) in test.prg
Mas como array não dá erro nunca.
Quem sabe não encontrei o problema.....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Usar objetos

Mensagem por marcosgambeta »

José,

Atente pare este detalhe: você está fazendo testes com strings VAZIAS.

Experimente colocar conteúdo nas strings e observe os resultados.

Inicie com valores menores e vá aumentando, observando o consumo de memória.
Atenciosamente,
Marcos Antonio Gambeta
Responder