Geheugen bij C++, Java, Delphi, VB, ...

Pagina: 1
Acties:

  • Baron
  • Registratie: Juli 2000
  • Laatst online: 21-06 17:02
Hoeveel geheugen heeft een standaard app. nodig gemaakt met de verschillende prog. talen.

Als standaard app. bedoeld ik een form met 1 knop. Wanneer je op de knop klikt, wordt een popup getoond met 'Hallo wereld'

Even in VB geprobeerd:
2092K mem usage + 572K VM size
In Visual C++ met MFC static linked:
1028K mem usage + 244K VM size

Wat geeft dit bij jullie in Delphi, Java, TrollTech C, ...

  • Baron
  • Registratie: Juli 2000
  • Laatst online: 21-06 17:02
euh niemand goesting om in Delphi of Java eens te proberen :'( ?

Verwijderd

Het geheugengebruik van een applicatie kan nogal wisselend zijn op verschillende systemen. NT/9x bijvoorbeeld hebben andere DLL's en andere systeemcomponenten. Het geheugengebruik zal dan dus ook anders zijn.

Het is niet moeilijk te raden wat ongeveer het geheugengebruik zal zijn, van laag naar hoog:
- native win32 programma (+/- 100k)
- MFC
- Delphi
- VB
- Java (erg veel, ivm de hele virtual machine)

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 21:15

Delphi32

Heading for the gates of Eden

In Delphi krijg ik een mem usage van 1592 kB bij eenzelfde prog, en dan maak ik geen gebruik van externe dll's enzo. Heb ff geen zin om dat ook nog te meten maar het kan.

Verwijderd

In Delphi is daar nog zo'n 500K vanaf te snoepen door de SysUtils en Graphics units niet te usen, maar dan heb je 't niet meer echt over een standaard app...
Incl. dll's is 't hier overigens ongeveer 7MB.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 16:30

Janoz

Moderator Devschuur®

!litemod

Let wel op dat je het geheugengebruik (vooral bij VM's) opgebouwd is uit een 'statisch'(een VM) en 'dynamisch' (het programma zelf) gedeelte..

In het geval van kleine programmatjes komen diegenen met een VM erg slecht uit de bus, maar dat kan behoorlijk bijdraaien als het programma groter wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 20:43

Hu9o

Schokkend

Het maakt denk ik ook wel uit hoe groot het formulier is....

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op donderdag 08 november 2001 20:41 schreef Hu9o het volgende:
Het maakt denk ik ook wel uit hoe groot het formulier is....
Waarom zou dat significant uitmaken? Er staat niets op het formulier behalve 1 knopje. Het enige verschil is dat windows een groter stuk desktop moet "onthouden".

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Op donderdag 08 november 2001 20:44 schreef Gerco het volgende:
Waarom zou dat significant uitmaken? Er staat niets op het formulier behalve 1 knopje. Het enige verschil is dat windows een groter stuk desktop moet "onthouden".
Da's 1 reden, en bovendien heeft ieder form ook nog een Canvas, waarop getekend moet kunnen worden.

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 20:43

Hu9o

Schokkend

Op donderdag 08 november 2001 20:44 schreef Gerco het volgende:

[..]

Waarom zou dat significant uitmaken? Er staat niets op het formulier behalve 1 knopje. Het enige verschil is dat windows een groter stuk desktop moet "onthouden".
onthouden: dat is dus geheugen gebruiken...

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16-09 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

het enige wat windows standaard "onthoud" is bepaalde eigenschappen van een windootje (positie, grootte, enz.), en welke child windootjes zich in deze window bevinden.

Voor de grafische content gebruikt ie het schermgeheugen, en dat zet ie dus niet in het geheugen ofzo (een offscreen buffer bijvoorbeeld). Vandaar dat als je een ander windootje over de window heen beweegt of als je het windootje buiten het scherm brengt en vervolgens weer terug, dat alles wat je erop getekend hebt weg is.

Windows zegt tegen je app namelijk wel stuk opnieuw getekent moet worden, en de app is zelf verantwoordelijk voor wat daar getekent wordt. Als jij persee wil dat alles wat je er een keer op getekent hebt onthouden moet worden zul je dat moeten programmeren.

Bij VB, en ik denk bij Delphi ook wel, is er geloof ik een optie om de grafische data te onthouden, maar dit is dus niet iets van Windows zelf. En ik dacht dat Java altijd onthoud wat er in de window getekent was. Dus als dit aanstaat kost het wel meer geheugen, maar normaal dus niet

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 21:15

Delphi32

Heading for the gates of Eden

Op donderdag 08 november 2001 19:21 schreef Afterlife het volgende:
In Delphi is daar nog zo'n 500K vanaf te snoepen door de SysUtils en Graphics units niet te usen, maar dan heb je 't niet meer echt over een standaard app...
Incl. dll's is 't hier overigens ongeveer 7MB.
Uiteraard heb ik alle overbodige units weggehaald, er waren er nog 5 over of zo (Classes, Forms, Controls, StdControls en nog een), en toch bleef het na een Build All steken op die 1592kB. Wat heb jij anders gedaan dan ik?

Ook leuk om te meten: de file size van deze standaard app, en dan met en zonder packages/dll's/VMs enzo.

  • Sponz
  • Registratie: Juni 2001
  • Niet online

Sponz

nul nest parfait saif moi

Op donderdag 08 november 2001 23:55 schreef Delphi32 het volgende:

[..]

Uiteraard heb ik alle overbodige units weggehaald, er waren er nog 5 over of zo (Classes, Forms, Controls, StdControls en nog een), en toch bleef het na een Build All steken op die 1592kB. Wat heb jij anders gedaan dan ik?
Delphi gebruikt runtime libarys, o.a. de VCL. Die maakt 't groter.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 21:15

Delphi32

Heading for the gates of Eden

Delphi gebruikt runtime libarys, o.a. de VCL. Die maakt 't groter.
Kleine correctie. Je mag in Delphi zelf uitmaken of je app de VCL als runtime library gebruikt of niet: vinkje Build with Runtime Packages bij Project Options.

Bij het builden zonder Runtime Packages hou je een applicatie over die niets nodig heeft om te runnen. Aangezien dat het meest efficient is qua geheugengebruik bij een app als deze heb ik dat dus gedaan.

Bovendien is Delphi smart genoeg om alleen dat mee te linken in de exe, wat ook daadwerkelijk nodig is.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 09 november 2001 00:49 schreef Delphi32 het volgende:
Kleine correctie. Je mag in Delphi zelf uitmaken of je app de VCL als runtime library gebruikt of niet: vinkje Build with Runtime Packages bij Project Options.
In allebei de gevallen gebruik je VCL als runtime library hoor. In het ene geval statisch meegelinked, in de andere dynamisch.

Bij C++ builder moet je op de Linker tab ook nog even 'Use dynamic RTL' uitvinken, weet niet of dat in Delphi ook zo is.
Bovendien is Delphi smart genoeg om alleen dat mee te linken in de exe, wat ook daadwerkelijk nodig is.
Dat is toch het hele idee achter linken? :?

De compiler stampt er alles in, en daarna raapt de linker alles wat feitelijk ergens gebruikt wordt bij elkaar tot een enkele output-file.

Het zou je overigens verbazen hoeveel de linker van VCL meeneemt voor 1 simpel formpje... BCB komt uit op een meg of zo geloof ik voor een leeg VCL formpje, tegen VC++ met pure Win32 API calls op iets van 50kB.

Professionele website nodig?


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Op donderdag 08 november 2001 20:44 schreef Gerco het volgende:

[..]

Waarom zou dat significant uitmaken? Er staat niets op het formulier behalve 1 knopje. Het enige verschil is dat windows een groter stuk desktop moet "onthouden".
Stel je runt in 32 bit color mode...

Da's dan dus wel eventjes 4!! bytes per pixel.

Stel je hebt een formulier wat 1000 pixels groter is (100 * 100) da's dan 4000 bytes. Een krappe 4 meg dus. Ik krijg gelijk meer respect voor 3d versnellers. De data doorvoer die die krengen voor elkaar krijgen, da's geen kattenzeik.

Verwijderd

Op donderdag 08 november 2001 23:55 schreef Delphi32 het volgende:
Uiteraard heb ik alle overbodige units weggehaald, er waren er nog 5 over of zo (Classes, Forms, Controls, StdControls en nog een), en toch bleef het na een Build All steken op die 1592kB. Wat heb jij anders gedaan dan ik?
Geen idee. :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
unit Unit1;

interface

uses
  Windows, Classes, Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageDlg('Hello World', mtCustom, [mbOK], 0);
end;

end.

En 't formpje is 86 x 165 pixels groot...

Verwijderd

Op vrijdag 09 november 2001 19:44 schreef The - DDD het volgende:
da's dan 4000 bytes. Een krappe 4 meg dus.
4 K...

  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
Op woensdag 07 november 2001 14:19 schreef Qlone het volgende:
Het is niet moeilijk te raden wat ongeveer het geheugengebruik zal zijn, van laag naar hoog:
- native win32 programma (+/- 100k)
100k????

Maak daar maar +/- 2,5k van (win32 ASM). De executable is 3kb.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op vrijdag 09 november 2001 19:44 schreef The - DDD het volgende:
Stel je runt in 32 bit color mode...

Da's dan dus wel eventjes 4!! bytes per pixel.
Waarom zou _elke_ pixel "waar niks staat" onthouden moeten worden??

Een beetje form hoeft dat niet voor lijkt me... Alleen maar "daar en daar zit iets, bij de volgende redraw teken je het maar".

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 09 november 2001 19:44 schreef The - DDD het volgende:
Stel je runt in 32 bit color mode...
Da's dan dus wel eventjes 4!! bytes per pixel.
Stel je hebt een formulier wat 1000 pixels groter is (100 * 100) da's dan 4000 bytes. Een krappe 4 meg dus. Ik krijg gelijk meer respect voor 3d versnellers. De data doorvoer die die krengen voor elkaar krijgen, da's geen kattenzeik.
Blahblah... Windows onthoudt geen formvulling. De GDI tekent recht op het schermgeheugen, en zodra er ergens iets opnieuw zichtbaar wordt krijgt het programma dat verantwoordelijk is voor dat stuk beeld (aan de hand van rectangles) een WM_PAINT message ervoor dat ie het lekker overnieuw mag tekenen.

Nul geheugengebruik dus.

Professionele website nodig?

Pagina: 1