Array lockere Bereichs- (Range-) check

Für Fragen rund um die Ide und zum Debugger
Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Array lockere Bereichs- (Range-) check

Beitrag von Erwin »

Also wenn man im Vorfeld ungefähr weiß, was man machen will, kann man ein wenig den Verbrauch hin und her verschieben, so dass insgesamt alles besser in den Speicher rein passt?
Das wird alles immer komplizierter, finde ich.
Zur Zeit frage ich mich wieder: Wie haben die Programmierer von alten Programmen es nur geschafft, mit weniger als 1 MB Code Welten zu schaffen, die insgesamt scheinbar größer als 1 000 x 1 000 sind??
Wenn ich das wüsste, bräuchten meine Programme vermutlich generell weniger Speicher.
Lazarus 2.2.0 / FP 3.2.4

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Array lockere Bereichs- (Range-) check

Beitrag von Mathias »

Zur Zeit frage ich mich wieder: Wie haben die Programmierer von alten Programmen es nur geschafft, mit weniger als 1 MB Code Welten zu schaffen,

Ein Programm geht ja noch, es gab sogar ein komplettes grafisches OS welches auf ein 1.4MB Diskette passte, inklusive ei paar Spiele und App.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Array lockere Bereichs- (Range-) check

Beitrag von Erwin »

Mathias hat geschrieben:Ein Programm geht ja noch, es gab sogar ein komplettes grafisches OS welches auf ein 1.4MB Diskette passte, inklusive ei paar Spiele und App.

Wow, toll. Heutzutage habe ich sogar den Eindruck, dass selbst 'große', also fähige Firmen lieber verschwenderisch mit den Arbeitsspeicher und Programmgrößen umgehen.
Wäre echt super zu wissen, wie die das gemacht haben?
Aber vermutlich könnte man dies dann eh nur zum kleinen Teil mit Lazaraus/FPC umsetzen. Weil dies würde sicher auch voraussetzen, dass jede Funktion und grafische Darstellung nur jene Methoden etc. enthält, die auch wirklich gebraucht wird.
Lazarus 2.2.0 / FP 3.2.4

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Array lockere Bereichs- (Range-) check

Beitrag von Warf »

Erwin hat geschrieben:Wow, toll. Heutzutage habe ich sogar den Eindruck, dass selbst 'große', also fähige Firmen lieber verschwenderisch mit den Arbeitsspeicher und Programmgrößen umgehen.
Wäre echt super zu wissen, wie die das gemacht haben?
Aber vermutlich könnte man dies dann eh nur zum kleinen Teil mit Lazaraus/FPC umsetzen. Weil dies würde sicher auch voraussetzen, dass jede Funktion und grafische Darstellung nur jene Methoden etc. enthält, die auch wirklich gebraucht wird.


Sie gehen nicht verschwenderisch mit Arbeitsspeicher um, sondern Ökonomisch. Wenn man mehr speicher braucht kauft man sich einfach mehr speicher. Das ist viel billiger als einen Programmierer zu bezahlen damit der den Assembly optimiert um ein paar bytes gut zu machen.

Normalerweise gilt immer Leistung ist wichtiger als Speicher. Das heißt lieber daten Doppelt speichern dafür zugriffsoptimiert (Z.B. als Hashmap für schnellen zugriff und als List zum durchsuchen). Selbst in der Microcontroller welt (wo ja oft gesagt wird das da speicher so wertvoll ist) kann ich für wenige Cent's einfach ein weiteres Speichermodul kaufen, wenn ich mehr Arbeitsspeicher oder Flash brauche.

Mein Tipp, mach dir um den Speicherverbrauch keine gedanken. SDKarten mit 32 GB bekommt man problemlos für weniger als 20€, speicher kostet nix.

Erwin hat geschrieben:Zur Zeit frage ich mich wieder: Wie haben die Programmierer von alten Programmen es nur geschafft, mit weniger als 1 MB Code Welten zu schaffen, die insgesamt scheinbar größer als 1 000 x 1 000 sind??


Das war damals nunmal die Anforderung, Sowohl an die Compilerbauer als auch an die Entwickler. Heute braucht man es wie gesagt nicht mehr. Den GCC kann man immernoch auf größe Optimieren lassen (-Os), aber an sich muss man es ja so sehen. Jede speicheroptimierung braucht 1. Zeit (Compilezeit und eventuell sogar runtime) und 2. Jemanden der sie Implementiert. Punkt 1 wollen die Endnutzer nicht haben. Hier regen sich z.T. leute (z.B. ich) darüber auf das man um ein C++ projekt zu kompilieren manchmal mehr als ne stunde braucht (LLVM mit 8GB ram zu kompilieren dauert etwa 40minuten -1,5 stunden je nach rechner, projektgröße etwa vergleichbar mit FPC + Lazarus das in weniger als 10 minuten kompiliert), da glaub ich kaum das es wirklich so viele leute gibt die lieber ewig warten, statt 1 MB speicher weniger zu verbrauchen (was bei Ram zahlen von 8GB+ und Plattengrößen im TB bereich lächerlich wenig ist). Und punkt 2 ist ein Ökonomisches Problem. Der FPC hat noch ne recht lange Roadmap, und aktuell werden einige neue Features entwickelt. Da stellt man sich dann die frage, was ist den Entwicklern wichtiger. Neue features, oder optimierungen. Und ich vertrete da die meinung lieber neue Features die mir eventuell stunden bei der Entwicklungszeit sparen, statt optimierungen, die mir ein paar MB's sparen

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Array lockere Bereichs- (Range-) check

Beitrag von Mathias »

Wow, toll. Heutzutage habe ich sogar den Eindruck, dass selbst 'große', also fähige Firmen lieber verschwenderisch mit den Arbeitsspeicher und Programmgrößen umgehen.
So sieht das MicroOS. Leider kann ich nirgends erkennen ob es Feeeware ist. Ansonsten würde ich es veröffentlichen.
was noch interessant ist, das Teil ist voll Multitasking fähig. Und es lief auch auf alten Kisten sehr flüssig, wen ich mich nicht täusche 386.
Einzig, einen Link habe ich noch, aber der ist leider tot: http://www.miray.de/de/products/system_cv.html
Dateianhänge
Bildschirmfoto vom 2018-07-30 17-30-27.png
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Array lockere Bereichs- (Range-) check

Beitrag von Warf »

Mathias hat geschrieben:So sieht das MicroOS. Leider kann ich nirgends erkennen ob es Feeeware ist. Ansonsten würde ich es veröffentlichen.
was noch interessant ist, das Teil ist voll Multitasking fähig. Und es lief auch auf alten Kisten sehr flüssig, wen ich mich nicht täusche 386.
Einzig, einen Link habe ich noch, aber der ist leider tot: http://www.miray.de/de/products/system_cv.html


Ich hab als Teil eines Unipraktikums auch ein Multithreading fähiges Betriebsystem für einen AVR mikrocontroller geschrieben das so klein war, das es auf einem 256k flash lief (Inklusive eines kleinen Paint programmes für ein Touch display). Kleine Betriebsysteme zu schreiben ist nicht so schwer wie man meinen will. Der grund warum der Linux Kernel 100MB+ groß ist liegt nicht daran das sie es nicht kleiner könnten, sondern das so nette dinge wie Treiber für praktisch alle Aktuelle hardware mitgeliefert wird.

Ich gebe gerne die 20€ mehr für ein paar GB speicher aus (für 20€ sollte man schon 40GB bekommen, das ist sogar genug für Windows 10) und hab dafür ein Vernünftiges Betriebsystem was unter anderem so dinge machen kann wie Treiber mitliefern, Antivirus und Firewall bereitstellen, und die ganzen anderen sachen die über die grundfunktionalitäten eines Betriebsystems hinausgehen, über die bereits schon der Computer verfügt hat mit dem die NASA ins all geflogen ist.

Jedes MB das ihr sparen wollt, sind Features oder Performanceoptimierungen. Und auf die will ich definitiv nicht verzichten. Daher meine Frage, wozu braucht ihr diesen geringen Speicherverbrauch?
Zuletzt geändert von Warf am Mo 30. Jul 2018, 18:02, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Array lockere Bereichs- (Range-) check

Beitrag von wp_xyz »

Mathias hat geschrieben:einen Link habe ich noch, aber der ist leider tot: http://www.miray.de/de/products/system_cv.html

Das Internet vergisst nichts: https://web.archive.org/web/20131107140 ... em_cv.html

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Array lockere Bereichs- (Range-) check

Beitrag von Mathias »

Der grund warum der Linux Kernel 100MB+ groß ist liegt nicht daran das sie es nicht kleiner könnten, sondern das so nutzlose dinge wie Treiber für praktisch alle Aktuelle hardware mitgeliefert wird.
Das MicroOS benutzt einfach den VESA-Trieber. Massenspeicher sind auch keine vorhanden.

Im Anhang eine Readme, welche ich dem Images entlocken konnte.
Dateianhänge
readme.txt
(14.6 KiB) 109-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Array lockere Bereichs- (Range-) check

Beitrag von Mathias »

wp_xyz hat geschrieben:
Mathias hat geschrieben:einen Link habe ich noch, aber der ist leider tot: http://www.miray.de/de/products/system_cv.html

Das Internet vergisst nichts: https://web.archive.org/web/20131107140 ... em_cv.html

Danke, an diese Webseite mag ich mich noch irgendwie erinnern.

Man könnten evtl. auf der neuen Seite, da dort ein Forum vorhanden ist, den Entwickler des MikrOs kontaktieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Array lockere Bereichs- (Range-) check

Beitrag von Warf »

Mathias hat geschrieben:Das MicroOS benutzt einfach den VESA-Trieber. Massenspeicher sind auch keine vorhanden.

Im Anhang eine Readme, welche ich dem Images entlocken konnte.


Also langer rede kurzer Sinn, das System kann praktisch nichts außer ganz grundlegende Basisfunktionalität. Ein 500 MB USB stick kostet C.a. 5€. Wenn ich darauf minimales ein Linux System (Arch Oder so) installiere reicht das vollkommen aus (Dürfte dann sogar noch 100-200MB frei haben).
Diverse Politische Parteien und Banken verteilen USB Sticks im GB bereich sogar als Werbegeschenke. Wenn dir also selbst die 5€ zu teuer sind, bekommst du das sogar kostenlos

Also nochmal. Wozu braucht man jemals so ein kleines OS? Selbst wenn wir uns mal Microcontroller anschauen, so haben die Meisten uC mittlerweile mehr als 200MB flash und 128 MB SRAM kosten (Einzelpreis, wenn man viele käuft wirds spott billig) nur 5€. Und wenn du dich für einen uC entscheidet der nicht genug Flash für ein OS hat, solltest du dir nochmal überlegen ob du dann wirklich ein OS brauchst.

Wenn ich raten müsste würde ich sagen, das es MicrOS nicht mehr gibt hat was damit zu tun das ein Minimales OS was dafür kaum Funktionalität hat nicht benötigt wird und daher wirtschaftlich nicht rentabel ist.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Array lockere Bereichs- (Range-) check

Beitrag von Mathias »

Also nochmal. Wozu braucht man jemals so ein kleines OS?
Der Nutzen ist eine andere Frage, aber ich denke dem Entwickler ging es drum, zu zeigen, was ein Pc alles kann, wen man ihm alles entlockt.
Da könnte man auch fragen wieso nehmen wir FPC , wir könnte ja auch in Java Code.

So nebenbei Code ich auch AVR, das ist auch erstaunlich, was man diesem Käfer alles entlock kann. Codet da man mit original Arduino, ist ein AVR eine lahme Krücke. Verwendet man direkt Register, dann kommt richtig Power.

Nochmals zurück zum MikrOS. Win31 konnte man auch so klein machen, das es auf eine Diskette passte. Immerhin mit Filemanager und Solitär. Für Progman reichte es nicht mehr. Und laufen konnte es nur noch im 286-Mode.

Wenn ich darauf minimales ein Linux System (Arch Oder so) installiere reicht das vollkommen aus
Man müsste mal probieren, wie klein man heute ein minimal Linux-Kernel hinkriegt.
Um da Jahe 2000 brachte man ihn noch so klein, das er in den unteren 640KB-RAM platz hatte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Array lockere Bereichs- (Range-) check

Beitrag von Warf »

Mathias hat geschrieben:Der Nutzen ist eine andere Frage, aber ich denke dem Entwickler ging es drum, zu zeigen, was ein Pc alles kann, wen man ihm alles entlockt.
Da könnte man auch fragen wieso nehmen wir FPC , wir könnte ja auch in Java Code.


FPC muss sich bei seiner Dateigröße aber auch nicht verstecken. Und tatsächlich mache ich das oft auch so das ich mir zu erst ein Problem anschaue und dann entscheide was für eine Sprache ich nehme. Auch wenn Pascal meine lieblingssprache ist, so ist Java für viele sachen doch einfacher (so hat man z.B. keine Cross plattform bugs, die ich mittlerweile immer öfter mitbekomme da ich meist parallel für Windows und Linux entwickle). Für das spiel was ich demletzt angefangen habe zu entwickeln hab ich mich für C# entschieden (wegen MonoGame) und für mein Programm was Daten parsen und visualisieren soll nehme ich Lazarus.

Und egal welche Sprache ich nehme, ist die letztendliche Programmgröße nie das kriterium warum ich mich für eine Sprache entscheide

Mathias hat geschrieben:Nochmals zurück zum MikrOS. Win31 konnte man auch so klein machen, das es auf eine Diskette passte. Immerhin mit Filemanager und Solitär. Für Progman reichte es nicht mehr. Und laufen konnte es nur noch im 286-Mode.

Das ist ja alles schön und gut, aber heute braucht man es nicht mehr. Klar kann ich die faszination verstehen hinter wie klein geht es, aber um wieder auf den Ursprünglichen punkt zurückzukommen, für Unternehmen lohnt es sich schlicht weg nicht darein zu investieren, darum gibt es keine Propräitäre software mehr die das macht.

Mathias hat geschrieben:Man müsste mal probieren, wie klein man heute ein minimal Linux-Kernel hinkriegt.
Um da Jahe 2000 brachte man ihn noch so klein, das er in den unteren 640KB-RAM platz hatte.

SuSe JeOS (just enough operating system) ist das Minimalste Linux das ich kenne, und das ist glaube ich 200-300 MB groß. Ich glaub viel weniger geht auch nicht ohne die funktionalität einzuschränken

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6199
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Array lockere Bereichs- (Range-) check

Beitrag von af0815 »

Warf hat geschrieben:Also nochmal. Wozu braucht man jemals so ein kleines OS? Selbst wenn wir uns mal Microcontroller anschauen, so haben die Meisten uC mittlerweile mehr als 200MB flash und 128 MB SRAM kosten (Einzelpreis, wenn man viele käuft wirds spott billig) nur 5€.

Heute nicht mehr, Speicher und Massenspeicher kostet nichts.

Ich kenne die Zeit da hat der billigste Basisrechner mit 1k Speicher soviel wie ein Monatslohn gekostet und die 16 Speichererweiterung nochmals soviel. Eine Festplatte mit Kontroler soviel wie ein VW Käfer. Ich habe noch Programme in Z80 Assembler geschrieben und händisch optimiert, weil ganz einfach Speicher verdammt teuer war.

In der Firma gab es damals schon 16 Bit Rechner mit diskret aufgebauten CPU's - Mikrokernel im 2708 und 4x74181 ALU als Rechneinheit + Serielle Schnittstelle auf der CPU - P800 und die verschiedenen Abarten. Siehe https://vaxbarn.com/index.php/feat/8-co ... ilips-p857

Die konnten aber schon mehr als die meisten anderen bekannten Rechner damals, Batchprogrammierung, Crosscompiling, .... allerdings Closed Source - nur für den Firmeninternen Gebrauch.
Da wurde optimiert, notfalls auch händisch. Denn den Bootstrap musst man händisch mit den Schaltern an der Vorderseite Wort für Wort eingeben. Bevor man den Reader starten konnte.

Heute ist es egal, ichhabe in meinem Arbeitrechner 24 GB Ram drinnen, damit ich in 1-2 Jahren doch noch Software verwenden kann :-)

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Array lockere Bereichs- (Range-) check

Beitrag von Warf »

af0815 hat geschrieben:Heute ist es egal, ichhabe in meinem Arbeitrechner 24 GB Ram drinnen, damit ich in 1-2 Jahren doch noch Software verwenden kann :-)

Andreas


Wobei RAM ja tatsächlich aktuell wieder teurer wird. Aber mir ist auch schon aufgefallen, grade wenn man extrem große C(++) Projekte kompiliert macht RAM extrem viel aus. LLVM mit 24 GB RAM zu kompilieren dauert nur 20 Minuten. Mit 4 GB RAM ist man bei mindestens 90 Minuten.

Aber das ist schon faszinierend, ich verwende aktuell an meinem Rechner eine USB SSD von der ich Boote, und die ist viel schneller als meine Sata HDD. Und das ganze (500GB) für nur 200€. Speicher ist mittlerweile echt billig, und da USB mittlerweile auch ziemlich schnell ist kann man sehr günstig seinen Computer erweitern.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Array lockere Bereichs- (Range-) check

Beitrag von Mathias »

Diese Demos in Anhang zeigen, was man alles in eine 4KByte kleine Com-Datei packen kann.
Die Demos am besten in der DOSBox laufen lassen.

Da staunt man. :shock:
Dateianhänge
4kintro.tar.gz
(32.72 KiB) 112-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten