Discussion:
Warum nicht?
(zu alt für eine Antwort)
Gregor Szaktilla
2014-04-15 20:04:08 UTC
Permalink
Raw Message
Hallo zusammen,

bitte entschuldigt den nichtssagenden Betreff. Ein treffender wollte mir
nicht einfallen.

Meiner Vorstellung nach dürfte es kein Problem sein, den exakten
Platzbedarf eines Programms direkt nach dem Start zu ermitteln. Selbst
nicht initialisierte Variablen müssen dem Compiler bekannt sein und ob
ein int 3, 4 oder 5 Bytes hat, sollte er wissen. Dass mir keiner sagen
kann, wie viel Speicher zu irgendeinem Zeitpunkt der Programmlaufzeit
nötig ist, ist mir klar.

Also warum bekomme ich keine entsprechende Meldung des Compilers? Bin
ich noch nicht genug „Fortgeschrittener“?

Gruß

Gregor
Rainer Weikusat
2014-04-15 20:24:23 UTC
Permalink
Raw Message
Post by Gregor Szaktilla
bitte entschuldigt den nichtssagenden Betreff. Ein treffender wollte
mir nicht einfallen.
Meiner Vorstellung nach dürfte es kein Problem sein, den exakten
Platzbedarf eines Programms direkt nach dem Start zu ermitteln. Selbst
nicht initialisierte Variablen müssen dem Compiler bekannt sein und ob
ein int 3, 4 oder 5 Bytes hat, sollte er wissen.
Das ist auch 'kein Problem': ZB koenntest Du fuer Linux (oder eine
andere Plattform, die ELF benutzt), die Groessen der entsprechenden
ELF-Sektionen addieren (alle mit einem A-Flag), aber das hat nicht nur
nichts mit C zu tun sondern auch mit keiner anderen Programmiersprache.
Gregor Szaktilla
2014-04-15 20:36:29 UTC
Permalink
Raw Message
Post by Rainer Weikusat
Das ist auch 'kein Problem': ZB koenntest Du fuer Linux (oder eine
andere Plattform, die ELF benutzt), die Groessen der entsprechenden
ELF-Sektionen addieren (alle mit einem A-Flag), aber das hat nicht nur
nichts mit C zu tun sondern auch mit keiner anderen Programmiersprache.
Eieiei. Jetzt muss ich mich nochmal entschuldigen. Ich gucke gleich mal,
ob d.c.l.misc existiert.

Gruß

Gregor
Stefan Ram
2014-04-15 21:12:26 UTC
Permalink
Raw Message
Post by Gregor Szaktilla
Meiner Vorstellung nach dürfte es kein Problem sein, den exakten
Platzbedarf eines Programms direkt nach dem Start zu ermitteln. Selbst
nicht initialisierte Variablen müssen dem Compiler bekannt sein und ob
ein int 3, 4 oder 5 Bytes hat, sollte er wissen. Dass mir keiner sagen
kann, wie viel Speicher zu irgendeinem Zeitpunkt der Programmlaufzeit
nötig ist, ist mir klar.
So etwas könnte der Loader wissen, die statischen Variablen
gehören aber - soweit ich weiß - nicht zum Programmsegment.
Ist aber hier off topic, da es nichts mit C zu tun hat,
sondern mit dem Kompilat. In dieser Newsgroup hier können
wir aber über die exakte Größe (in Quellzeichen) einer
Übersetzungseinheit sprechen.
Gregor Szaktilla
2014-04-15 21:24:47 UTC
Permalink
Raw Message
Danke für die Antworten. d.c.l.misc ist abonniert

Gruß

Gregor
Juergen Ilse
2014-04-16 04:52:59 UTC
Permalink
Raw Message
Hallo,
Post by Gregor Szaktilla
Meiner Vorstellung nach dürfte es kein Problem sein, den exakten
Platzbedarf eines Programms direkt nach dem Start zu ermitteln. Selbst
nicht initialisierte Variablen müssen dem Compiler bekannt sein und ob
ein int 3, 4 oder 5 Bytes hat, sollte er wissen. Dass mir keiner sagen
kann, wie viel Speicher zu irgendeinem Zeitpunkt der Programmlaufzeit
nötig ist, ist mir klar.
Also warum bekomme ich keine entsprechende Meldung des Compilers? Bin
ich noch nicht genug „Fortgeschrittener“?
Was fuer eine Meldung erwartest du denn unter welchen Umstaenden vom
Compiler? Hast du dir auch bewusst gemacht, dass der Rechner auf dem
ein Programm uebersetzt wird nicht zwingend auch der Rechner sein muss,
auf dem das uebersetzte Programm dann letztendlich auch ausgefuehrt
wird? Der Compiler kann i.d.R. nicht wissen, wieviel Resourcen auf
dem Rechner zur Verfuegung stehen werden, auf dem das uebersetzte
Programm spaeter laufen soll.

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
--
Ein Domainname ist nur ein Name, nicht mehr und nicht weniger.
Wer mehr hineininterpretiert, hat das Domain-Name-System nicht
verstanden.
Peter J. Holzer
2014-04-16 16:27:06 UTC
Permalink
Raw Message
Post by Gregor Szaktilla
Meiner Vorstellung nach dürfte es kein Problem sein, den exakten
Platzbedarf eines Programms direkt nach dem Start zu ermitteln. Selbst
nicht initialisierte Variablen müssen dem Compiler bekannt sein und ob
ein int 3, 4 oder 5 Bytes hat, sollte er wissen.
Ja, weiß er (bzw. der Assembler oder Linker, je nachdem, wie auf Deinem
System die Übersetzung aufgeteilt ist).
Post by Gregor Szaktilla
Dass mir keiner sagen kann, wie viel Speicher zu irgendeinem Zeitpunkt
der Programmlaufzeit nötig ist, ist mir klar.
Also warum bekomme ich keine entsprechende Meldung des Compilers?
Vermutlich, weil diese Meldung niemanden interessiert. Ich kann mich
erinnern, dass in den 80er-Jahren Compiler/Linker gerne solche Meldungen
ausgegeben haben, aber besonders hilfreich waren die schon damals nicht
(obwohl damals noch sehr viel mehr mit statischen Variablen statt malloc
gearbeitet wurde, dynamisch gelinkte Libraries ein Fremdwort waren, und
RAM generell knapp war).

Unter Unix bekommst Du diesn Output außerdem vom Programm "size":

% size *.o errno
text data bss dec hex filename
484 49 0 533 215 errno.o
1052 1008 0 2060 80c errno_list.o
2550 1364 8 3922 f52 errno

hp
--
_ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung:
|_|_) | | Man feilt solange an seinen Text um, bis
| | | ***@hjp.at | die Satzbestandteile des Satzes nicht mehr
__/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Stefan Reuther
2014-04-16 16:50:53 UTC
Permalink
Raw Message
Post by Peter J. Holzer
Post by Gregor Szaktilla
Dass mir keiner sagen kann, wie viel Speicher zu irgendeinem Zeitpunkt
der Programmlaufzeit nötig ist, ist mir klar.
Also warum bekomme ich keine entsprechende Meldung des Compilers?
Vermutlich, weil diese Meldung niemanden interessiert.
"nicht interessiert" ist vielleicht übertrieben. Es gibt Mechanismen für
die Leute, die das interessiert, es herauszufinden. Und ein Compiler
soll im Erfolgsfall schlicht und ergreifend die Klappe halten, damit man
die Warnungen besser sieht.
Post by Peter J. Holzer
% size *.o errno
text data bss dec hex filename
484 49 0 533 215 errno.o
1052 1008 0 2060 80c errno_list.o
2550 1364 8 3922 f52 errno
Einen analogen Befehl gibt es auch in zahlreichen Embedded-Toolchains.
Und wenn man Cygwin installiert hat, hat man einen 'size'-Befehl, der
auch mit Visual-C-Objektdateien und *.exe funktioniert.

Details würde ich an Gregors Stelle in einer Newsgroup zu seiner
Plattform erfragen.


Stefan

Loading...