Variablen Deklaration Optimierung



  • WerWieWas schrieb:

    volkard schrieb:

    mach alles so lokal wie möglich außer den ziemlich seltenen ausnahmen wie dem zeilenlesstring.

    ok, aber warum genau z.b. in diesem fall ?
    kannst mir das schnell kurz erklären oder mir nen link, quelle oder nen schlagwort geben wo ich soetwas nachlesen kann? bitte 😃

    ich bin sichi, du kommst von alleine drauf, sobald du es wissen darfst. 😉



  • Kellerautomat schrieb:

    WerWieWas schrieb:

    ja aber wann macht das der compiler und wann nicht?
    soweit war ich auch schon... das meinte ichja mit optimiert vom compiler...
    aber weißt du das der compiler alle variablen wegschmeisst oder zusammenfasst oder sonst was? wenn ja quelle?
    kann man da eine regel definieren welche variablen vom compiler optimiert werden?

    frag ihn doch!

    🙂 danke für deine geistreichen und vorallem nachvollziehbar belegbare hilfen!
    darauf bin ich bis jetzt noch gar nicht gekommen ihn einfac zu fragen 😮

    Kellerautomat schrieb:

    WerWieWas schrieb:

    bedenke bitte auch das das "neu deklarieren" einer variablen auch rechenleistung benötigt und es auch bei abertausenden nicht unbedingt sinnvoll ist lokal gültige zu nutzen... aber was konkret ist der unterschied ob ich eine im speicher halte oder ob sie die gültigkeit verliert? -> sind das merkliche performance unterschiede? -> vll beispiel oder ne quelle?

    noe, "neu deklarieren" (du meinst definieren) kostet erstmal garnix. der compiler alloziert nen stack frame mit genug platz fuer alle variablen, das ist nur ein 'sub rsp, <bytes>'. initialisierungen kosten. vielleicht.

    nope ich meine deklarieren...

    Deklaration: Mit der Deklaration einer Variablen wird der Typ der Variablen (z.B. der Datentyp int für ganze Zahlen) festgelegt und der namentliche Bezeichner für diese Variable. Eine korrekte Deklaration ist vor allem für den Compiler von Bedeutung, denn dieser muss wissen, wie der im Speicher abgelegte Wert zu interpretieren ist.
    Definition: Mit der Definition wird der erforderliche Speicherplatz für eine Variable reserviert. Eine korrekte Definition ist vor allem für den Linker von Bedeutung.
    Initialisierung: Mit der Initialisierung wird der Variablen ein Anfangswert zugewiesen, der sich während des Programmablaufs ändern kann, jedoch nicht zwangsläufig ändern muss.
    Zuweisung: Bei der Initialisierung erfolgt die Zuweisung des rechts stehenden Operanden (Anfangswert) zum links stehen Operanden (Bezeichner der Variablen) durch einen Zuweisungsoperator (=). Statt einer Initialisierung durch einen einzelnen Anfangswert, kann einer Variablen ein berechneter Wert von anderen Speicheradressen zugewiesen werden.

    deklarationen brauchen speicher und rechenleistung 😉
    aber das beantwortet ja nicht meine frage...
    bitte auf meine fragestellung beziehen... :

    wo ist der unterschied und hat es vor- und nachteile? (und warum?)



  • volkard schrieb:

    WerWieWas schrieb:

    volkard schrieb:

    mach alles so lokal wie möglich außer den ziemlich seltenen ausnahmen wie dem zeilenlesstring.

    ok, aber warum genau z.b. in diesem fall ?
    kannst mir das schnell kurz erklären oder mir nen link, quelle oder nen schlagwort geben wo ich soetwas nachlesen kann? bitte 😃

    ich bin sichi, du kommst von alleine drauf, sobald du es wissen darfst. 😉

    sobald ich es wissen darf? was soll das bedeuten? 😃
    kann mir deine aussage zur lösung des problems helfen?! -> nein, bitte kein post hunting hier.. oder sinnlos beiträge... hilft mir nicht weiter... 😡

    ist ja mal eine interessante frage warum ich das nicht wissen sollen dürfte?



  • WerWieWas schrieb:

    nope ich meine deklarieren...

    Deklaration: Mit der Deklaration einer Variablen wird der Typ der Variablen (z.B. der Datentyp int für ganze Zahlen) festgelegt und der namentliche Bezeichner für diese Variable. Eine korrekte Deklaration ist vor allem für den Compiler von Bedeutung, denn dieser muss wissen, wie der im Speicher abgelegte Wert zu interpretieren ist.
    ...
    deklarationen brauchen speicher und rechenleistung 😉

    Liest du deine kopierten Texte auch selber?



  • WerWieWas schrieb:

    deklarationen brauchen speicher und rechenleistung 😉

    Nö, eigentlich nicht.

    WerWieWas schrieb:

    ist ja mal eine interessante frage warum ich das nicht wissen sollen dürfte?

    Weil diese Art der Optimierung böse danach klingt, als würdest Du Dir den Stil versauen wollen. Dem mag ich heute keinen Vorschub leisten. Mach erstmal einfach alles so lokal wie möglich.
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ

    WerWieWas schrieb:

    😡

    Damit wirste nicht mehr sehr viele hilfreiche Antworten bekommen. Von mir jedenfalls nicht mehr, lies ein Buch!



  • WerWieWas schrieb:

    🙂 danke für deine geistreichen und vorallem nachvollziehbar belegbare hilfen!
    darauf bin ich bis jetzt noch gar nicht gekommen ihn einfac zu fragen 😮

    schau dir den assembly-output an. das ist der einzige weg zu wissen, was passiert ist.



  • manni66 schrieb:

    WerWieWas schrieb:

    nope ich meine deklarieren...
    Deklaration: Mit der Deklaration einer Variablen wird der Typ der Variablen (z.B. der Datentyp int für ganze Zahlen) festgelegt und der namentliche Bezeichner für diese Variable. Eine korrekte Deklaration ist vor allem für den Compiler von Bedeutung, denn dieser muss wissen, wie der im Speicher abgelegte Wert zu interpretieren ist.
    ...
    deklarationen brauchen speicher und rechenleistung 😉

    Liest du deine kopierten Texte auch selber?

    jop... nur dort steht es ist wichtig für den compiler damit er weiß wo sie im speicher abgelegt sind...
    so nun ist die frage kann man sie gezielt so ablegen das es schneller wird? 🙂

    volkard schrieb:

    WerWieWas schrieb:

    deklarationen brauchen speicher und rechenleistung 😉

    Nö, eigentlich nicht.

    WerWieWas schrieb:

    ist ja mal eine interessante frage warum ich das nicht wissen sollen dürfte?

    Weil diese Art der Optimierung böse danach klingt, als würdest Du Dir den Stil versauen wollen. Dem mag ich heute keinen Vorschub leisten. Mach erstmal einfach alles so lokal wie möglich.
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ

    WerWieWas schrieb:

    😡

    Damit wirste nicht mehr sehr viele hilfreiche Antworten bekommen. Von mir jedenfalls nicht mehr, lies ein Buch!

    wieso wird kein speicher belegt wenn ich eine variable in den speicher lege? 😕 (rechenleistung für den vorgang des speicherns? wie funktioniert das sonst?)

    na ja es ist ja so lokal wie möglich... mir geht es ja eher darum es noch "lokaler" zu machen um deklarationen eben zu sparen ( wie in deinem link beschrieben nur mit variablen und nicht objekten, alternativ ähnliches vorgehen oder möglichkeiten )

    ja sry für 😡 aber solche unproduktiven bzw. sinnlosen sätze wie von dir oben lassen mich einfach meinen spaß an der einen oder anderen community verlieren ... deswegen in meinen augen ein absolutes nogo ein post ohne wirkliche aussage abzusenden und threads von leuten die wirklich eine frage haben und hilfe brauchen zu zuspamen... 😉 aber muss jeder für sich selbst wissen...



  • Kellerautomat schrieb:

    WerWieWas schrieb:

    🙂 danke für deine geistreichen und vorallem nachvollziehbar belegbare hilfen!
    darauf bin ich bis jetzt noch gar nicht gekommen ihn einfac zu fragen 😮

    schau dir den assembly-output an. das ist der einzige weg zu wissen, was passiert ist.

    joa ...
    ich weiß was passiert ... nur ich will wissen was kann man noch verbessern...
    assembly hab ich mir schon angeschaut...
    also wie kann ich die variablen gezielt in den speicherlegen um ihre zugriffszeiten zu verkürzen bzw. zu verbessern?
    oder ist soetwas generell nicht möglich oder sieht man aus programm design gründen von soetwas ab? (warum wieso? quelle?) :p



  • man kann keine variablen in den speicher legen. dein computer kennt nur ein grosses array aus bytes.
    variablen sind nur namen fuer diese zellen. die muessen nicht erst erzeugt werden, weil es sie schon immer gab und geben wird.



  • WerWieWas schrieb:

    deklarationen brauchen speicher und rechenleistung 😉

    NEIN. Deklarationen brauchen keine Rechenleistung.

    Der Speicher ist ja im Rechner eingebaut. Mit der Deklaration sage ich erst mal nur dem Compiler, dass er vorsehen soll, einen bestimmten Speicherbereich einen Namen zu geben, um ihn ansprechen zu könne. Zur Laufzeit passiert bei der Deklaration erst mal gar nichts.

    Wenn ich 3 lokale Variablen mit jeweils 8 Bytes habe, dann muss der Compiler code generieren, um den Stackpointer um 24 Bytes zu verschieben (vereinfacht dargestellt). Ob ich das in einer Deklaration mache oder in mehreren ist absolut unerheblich. Da wird noch nicht mal der Optimierer bemüht.



  • Kellerautomat schrieb:

    man kann keine variablen in den speicher legen. dein computer kennt nur ein grosses array aus bytes.
    variablen sind nur namen fuer diese zellen. die muessen nicht erst erzeugt werden, weil es sie schon immer gab und geben wird.

    - 😮 jop schon klar, mir sind auch stack und heap bekannt und alles andere..
    - vielleicht ist das meiner seits nicht ganz korrekt formuliert...
    - ich habe aber auch geschrieben "belegt" und der inhalt deiner im code erzeugen variablen "belegt" schon speicher im stack...
    - wenn ich will kann ich soagr ganz gezielte bereich im stack beschreiben... 😉
    - im heap übrigens auch... -> dazu musst nur deine exe disassemblieren und schon hast alles was du brauchst... )

    - mein problem ist nur folgendes: ich weiß nicht wie ich das nun anordne das es schneller werden kann... bzw sollte...
    - ich weiß auch nicht wo ich soetwas nach lese...
    - aber soweit ich schon rausgefunden habe ist das von der compiler optimierung abhänig... also sollte ich dort mal nachlesen...

    - ich meine in etwa sowas hier :
    http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung

    dort geht es aber im mikrokontroller(das wäre ja nochnicht mal das problem) und optimierungen an anderen stellen als die die ich vornehmen möchte... 😞
    ⚠ (mir geht es nur um die deklaration der variablen...)



  • tntnet schrieb:

    WerWieWas schrieb:

    deklarationen brauchen speicher und rechenleistung 😉

    NEIN. Deklarationen brauchen keine Rechenleistung.

    Der Speicher ist ja im Rechner eingebaut. Mit der Deklaration sage ich erst mal nur dem Compiler, dass er vorsehen soll, einen bestimmten Speicherbereich einen Namen zu geben, um ihn ansprechen zu könne. Zur Laufzeit passiert bei der Deklaration erst mal gar nichts.

    Wenn ich 3 lokale Variablen mit jeweils 8 Bytes habe, dann muss der Compiler code generieren, um den Stackpointer um 24 Bytes zu verschieben (vereinfacht dargestellt). Ob ich das in einer Deklaration mache oder in mehreren ist absolut unerheblich. Da wird noch nicht mal der Optimierer bemüht.

    aber sie belegen speicher, und dieses speicher belegen kostet rechenleistung...
    da dein programm ja (vereinfacht) zum compiler sagt "SPEICHER DAS MAL ..."
    dann arbeitet = leistung der prozessor... wie sollte so etwas sonst funktionieren? 😕

    nat. ist meine aussage etwas ungenau... wiel bei dder deklaration selbst wird keine rechnenleistung verbraucht... (obwohl ich mir da auch nicht 100% sicher bin da dein programm ja trozdem einen "platzhalter mit namentlicher bezeichnung" mit speicherbereich erzeugt und das muss ja vom prozessor alles abgearbeitet werden oder nicht? 😕

    ja, das war auch nicht meine frage... meine frage ist eher macht es sinn die variablen die ich nutze so nah wie möglich "zusammen" auf den stack zulegen so das der stackpointer weniger "springen" oder "verschoben" werden muss? 😕

    würde eine deratige optimierung sinn machen? wenn ja merkt man diesen bei "vielen" variablen (ca 100 versch.) ?



  • Generell gilt:

    1. Bei Microoptimierungen ist der Kompiler in der Regel mindestens so schlau wie ihr, meistens sogar schlauer, da er die Zielarchitektur besser kennt und Optimierungen oft alles andere als intuitiv sind.
    2. 80 % des Codes sind überhaupt nicht Performancekritisch

    Also mach euch nicht unnötig früh Gedanken über Optimierungen sondern schreibt gut lesbaren, problemnahen Code. Der ist meistens ohnehin der schnellste.



  • TNA schrieb:

    Generell gilt:

    1. Bei Microoptimierungen ist der Kompiler in der Regel mindestens so schlau wie ihr, meistens sogar schlauer, da er die Zielarchitektur besser kennt und Optimierungen oft alles andere als intuitiv sind.
    2. 80 % des Codes sind überhaupt nicht Performancekritisch

    Also mach euch nicht unnötig früh Gedanken über Optimierungen sondern schreibt gut lesbaren, problemnahen Code. Der ist meistens ohnehin der schnellste.

    jop ja aber würde es sinn machen die variablen sonah wie möglich "zusammen" und nacheinander anhand des gebrauchs der variablen diese gezielt entsprechend des benötigten zugriffs auf den stack zulegen oder merkt man so eine optimierung nichT?
    da dann der stackpointer weniger "springen" müsste... oder halt nich?
    oder nen schlagwort nach dem ich googeln kann würde mir schon helfen... 🙂



  • WerWieWas schrieb:

    jop ja aber würde es sinn machen die variablen sonah wie möglich "zusammen" und nacheinander anhand des gebrauchs der variablen diese gezielt entsprechend des benötigten zugriffs auf den stack zulegen oder merkt man so eine optimierung nichT?

    Der Kompiler entscheidet selber wo er eine Variable auf den Stack legt (wenn er das überhaupt tut und sie nicht in einem Register oder Direktoperanden hält). Es ist also aus Performancesicht völlig wurscht wo genau du sie deklarierst. Das Programm das der Kompiler aus deinem Code macht ist kaum noch wieder zu erkennen. Schau dir mal selber den Assemblercode an den ein Compiler erzeugt.



  • TNA schrieb:

    WerWieWas schrieb:

    jop ja aber würde es sinn machen die variablen sonah wie möglich "zusammen" und nacheinander anhand des gebrauchs der variablen diese gezielt entsprechend des benötigten zugriffs auf den stack zulegen oder merkt man so eine optimierung nichT?

    Der Kompiler entscheidet selber wo er eine Variable auf den Stack legt (wenn er das überhaupt tut und sie nicht in einem Register oder Direktoperanden hält). Es ist also aus Performancesicht völlig wurscht wo genau du sie deklarierst. Das Programm das der Kompiler aus deinem Code macht ist kaum noch wieder zu erkennen. Schau dir mal selber den Assemblercode an den ein Compiler erzeugt.

    man kann speicherbereiche auch direkt adressieren 😉 ...
    bitte ordentl. lesen... ich habe es schon dissassembliert...
    hab mir das angeschaut... jedoch ist das für meine frage unrelevant weil ich wissen will:

    - ob es geschwindigkeitsvorteile hat die variablen "in logischer" reihenfolge zu speichern so das der stackpointer evt. weniger springen müssen um versch. bereiche zulesen... ?
    - und ob man das merken würde? -> bei vielen variablen...



  • WerWieWas schrieb:

    nope ich meine deklarieren...

    Deklaration: Mit der Deklaration einer Variablen wird der Typ der Variablen (z.B. der Datentyp int für ganze Zahlen) festgelegt und der namentliche Bezeichner für diese Variable. Eine korrekte Deklaration ist vor allem für den Compiler von Bedeutung, denn dieser muss wissen, wie der im Speicher abgelegte Wert zu interpretieren ist.
    Definition: Mit der Definition wird der erforderliche Speicherplatz für eine Variable reserviert. Eine korrekte Definition ist vor allem für den Linker von Bedeutung.
    Initialisierung: Mit der Initialisierung wird der Variablen ein Anfangswert zugewiesen, der sich während des Programmablaufs ändern kann, jedoch nicht zwangsläufig ändern muss.
    Zuweisung: Bei der Initialisierung erfolgt die Zuweisung des rechts stehenden Operanden (Anfangswert) zum links stehen Operanden (Bezeichner der Variablen) durch einen Zuweisungsoperator (=). Statt einer Initialisierung durch einen einzelnen Anfangswert, kann einer Variablen ein berechneter Wert von anderen Speicheradressen zugewiesen werden.

    deklarationen brauchen speicher und rechenleistung 😉

    Wow, das ist wirklich der Gipfel der Ignoranz. Du versuchst die Programmierer hier zu belehren, was Deklarationen etc. sind, und liest die Begriffsdefinitionen selbst nicht mal durch, sondern gibst dann so etwas von dir?

    WerWieWas schrieb:

    ja sry für 😡 aber solche unproduktiven bzw. sinnlosen sätze wie von dir oben lassen mich einfach meinen spaß an der einen oder anderen community verlieren ... deswegen in meinen augen ein absolutes nogo ein post ohne wirkliche aussage abzusenden und threads von leuten die wirklich eine frage haben und hilfe brauchen zu zuspamen... 😉 aber muss jeder für sich selbst wissen...

    Du denkst also befähigt zu sein um entscheiden zu können, was sinnvoll / inhaltslos ist? Und zudem ist das was er sagt nicht nur inhaltsvoll sondern auch korrekt:

    volkard schrieb:

    ich bin sichi, du kommst von alleine drauf, sobald du es wissen darfst. 😉

    Wenn du dann ein Gespür dafür hast, was Zeit frisst und was nicht, dann wirst du auch alleine darauf kommen, ob ein zusätzliches (redundantes) Initialisieren annehmbar ist.
    Du erinnerst mich irgendwie an diesen Forentroll Chechen von vor 'ner Weile. Der dachte auch immer, er kann so gut beurteilen, welche Posts hilfreich sind und welche nicht (was er aber ebenfalls nicht konnte).

    WerWieWas schrieb:

    assembly hab ich mir schon angeschaut...

    Dann hast du ja gesehen, dass derselbe Assembler-Code generiert wird. Und damit erübrigt sich die Frage dann ja. Folglich hast du gelogen und du hast ihn dir nicht angeschaut.

    WerWieWas schrieb:

    also wie kann ich die variablen gezielt in den speicherlegen um ihre zugriffszeiten zu verkürzen bzw. zu verbessern?

    Im Speicher liegen sie sowieso. Meinst du vll. wie man sie ins Register legen kann? Der Compiler kann und wird solche Optimierungen besser als du machen. Worüber der Programmierer in dem Zusammenhang selbst nachdenken sollte ist Cache-Friendliness. Ist wichtig, wenn man mit z.B. grossen Matrizen oder Arrays arbeitet.

    WerWieWas schrieb:

    - 😮 jop schon klar, mir sind auch stack und heap bekannt und alles andere..

    Gibt es in C++ streng genommen beides nicht. Wenn's sowas auf deiner Plattform gibt dann ist das Zufall.

    WerWieWas schrieb:

    - wenn ich will kann ich soagr ganz gezielte bereich im stack beschreiben... 😉
    - im heap übrigens auch... -> dazu musst nur deine exe disassemblieren und schon hast alles was du brauchst... )

    Aha...

    WerWieWas schrieb:

    - mein problem ist nur folgendes: ich weiß nicht wie ich das nun anordne das es schneller werden kann... bzw sollte...

    Es wurde schon eine Zillion Mal gesagt, dass Deklaration und Definition von lokalen Variablen von fundamentalen Typen keine Zeit braucht.

    WerWieWas schrieb:

    aber sie belegen speicher, und dieses speicher belegen kostet rechenleistung...

    Ok, ab hier bin ich der Überzeugung, dass du entweder ein Troll oder ein Ignorant bist.

    WerWieWas schrieb:

    nat. ist meine aussage etwas ungenau... wiel bei dder deklaration selbst wird keine rechnenleistung verbraucht... (obwohl ich mir da auch nicht 100% sicher bin da dein programm ja trozdem einen "platzhalter mit namentlicher bezeichnung" mit speicherbereich erzeugt und das muss ja vom prozessor alles abgearbeitet werden oder nicht? 😕

    Variablen oder Variablennamen existieren nicht im kompilierten Programm. Das ist nur imaginäres Zeug von der Programmiersprache zur Unterstützung des Programmierers.

    WerWieWas schrieb:

    ja, das war auch nicht meine frage... meine frage ist eher macht es sinn die variablen die ich nutze so nah wie möglich "zusammen" auf den stack zulegen so das der stackpointer weniger "springen" oder "verschoben" werden muss? 😕

    Wurde auch schon gesagt aber: Es wird immer gleich viel Stackspeicher pro Funktion benutzt, ganz egal wo oder wann oder ob Variablen definiert werden. Da wird nicht nach und nach mehr Speicher belegt...

    WerWieWas schrieb:

    würde eine deratige optimierung sinn machen? wenn ja merkt man diesen bei "vielen" variablen (ca 100 versch.) ?

    Ne.

    WerWieWas schrieb:

    man kann speicherbereiche auch direkt adressieren 😉 ...

    Und das hat was genau mit dem zu tun, was TNA geschrieben hat?

    WerWieWas schrieb:

    bitte ordentl. lesen...

    lol, kommt vom Richtigen. Mal bitte vom hohen Ross hinuntersteigen.

    WerWieWas schrieb:

    - ob es geschwindigkeitsvorteile hat die variablen "in logischer" reihenfolge zu speichern so das der stackpointer evt. weniger springen müssen um versch. bereiche zulesen... ?

    Nein, der springt genau ein einziges Mal und zwar ganz am Anfang. Dann bleibt er für den ganzen Scope gleich gross. Hat Kellerautomat schon vor 'ner Weile mehrfach betont.



  • asfdlol schrieb:

    WerWieWas schrieb:

    nope ich meine deklarieren...

    Deklaration: Mit der Deklaration einer Variablen wird der Typ der Variablen (z.B. der Datentyp int für ganze Zahlen) festgelegt und der namentliche Bezeichner für diese Variable. Eine korrekte Deklaration ist vor allem für den Compiler von Bedeutung, denn dieser muss wissen, wie der im Speicher abgelegte Wert zu interpretieren ist.
    Definition: Mit der Definition wird der erforderliche Speicherplatz für eine Variable reserviert. Eine korrekte Definition ist vor allem für den Linker von Bedeutung.
    Initialisierung: Mit der Initialisierung wird der Variablen ein Anfangswert zugewiesen, der sich während des Programmablaufs ändern kann, jedoch nicht zwangsläufig ändern muss.
    Zuweisung: Bei der Initialisierung erfolgt die Zuweisung des rechts stehenden Operanden (Anfangswert) zum links stehen Operanden (Bezeichner der Variablen) durch einen Zuweisungsoperator (=). Statt einer Initialisierung durch einen einzelnen Anfangswert, kann einer Variablen ein berechneter Wert von anderen Speicheradressen zugewiesen werden.

    deklarationen brauchen speicher und rechenleistung

    Wow, das ist wirklich der Gipfel der Ignoranz. Du versuchst die Programmierer hier zu belehren, was Deklarationen etc. sind, und liest die Begriffsdefinitionen selbst nicht mal durch, sondern gibst dann so etwas von dir?

    WerWieWas schrieb:

    ja sry für 😡 aber solche unproduktiven bzw. sinnlosen sätze wie von dir oben lassen mich einfach meinen spaß an der einen oder anderen community verlieren ... deswegen in meinen augen ein absolutes nogo ein post ohne wirkliche aussage abzusenden und threads von leuten die wirklich eine frage haben und hilfe brauchen zu zuspamen... aber muss jeder für sich selbst wissen...

    Du denkst also befähigt zu sein um entscheiden zu können, was sinnvoll / inhaltslos ist? Und zudem ist das was er sagt nicht nur inhaltsvoll sondern auch korrekt:

    volkard schrieb:

    ich bin sichi, du kommst von alleine drauf, sobald du es wissen darfst.

    Wenn du dann ein Gespür dafür hast, was Zeit frisst und was nicht, dann wirst du auch alleine darauf kommen, ob ein zusätzliches (redundantes) Initialisieren annehmbar ist.
    Du erinnerst mich irgendwie an diesen Forentroll Chechen von vor 'ner Weile. Der dachte auch immer, er kann so gut beurteilen, welche Posts hilfreich sind und welche nicht (was er aber ebenfalls nicht konnte).

    WerWieWas schrieb:

    assembly hab ich mir schon angeschaut...

    Dann hast du ja gesehen, dass derselbe Assembler-Code generiert wird. Und damit erübrigt sich die Frage dann ja. Folglich hast du gelogen und du hast ihn dir nicht angeschaut.

    WerWieWas schrieb:

    also wie kann ich die variablen gezielt in den speicherlegen um ihre zugriffszeiten zu verkürzen bzw. zu verbessern?

    Im Speicher liegen sie sowieso. Meinst du vll. wie man sie ins Register legen kann? Der Compiler kann und wird solche Optimierungen besser als du machen. Worüber der Programmierer in dem Zusammenhang selbst nachdenken sollte ist Cache-Friendliness. Ist wichtig, wenn man mit z.B. grossen Matrizen oder Arrays arbeitet.

    WerWieWas schrieb:

    - 😮 jop schon klar, mir sind auch stack und heap bekannt und alles andere..

    Gibt es in C++ streng genommen beides nicht. Wenn's sowas auf deiner Plattform gibt dann ist das Zufall.

    WerWieWas schrieb:

    - wenn ich will kann ich soagr ganz gezielte bereich im stack beschreiben...
    - im heap übrigens auch... -> dazu musst nur deine exe disassemblieren und schon hast alles was du brauchst... )

    Aha...

    WerWieWas schrieb:

    - mein problem ist nur folgendes: ich weiß nicht wie ich das nun anordne das es schneller werden kann... bzw sollte...

    Es wurde schon eine Zillion Mal gesagt, dass Deklaration und Definition von lokalen Variablen von fundamentalen Typen keine Zeit braucht.

    WerWieWas schrieb:

    aber sie belegen speicher, und dieses speicher belegen kostet rechenleistung...

    Ok, ab hier bin ich der Überzeugung, dass du entweder ein Troll oder ein Ignorant bist.

    WerWieWas schrieb:

    nat. ist meine aussage etwas ungenau... wiel bei dder deklaration selbst wird keine rechnenleistung verbraucht... (obwohl ich mir da auch nicht 100% sicher bin da dein programm ja trozdem einen "platzhalter mit namentlicher bezeichnung" mit speicherbereich erzeugt und das muss ja vom prozessor alles abgearbeitet werden oder nicht? 😕

    Variablen oder Variablennamen existieren nicht im kompilierten Programm. Das ist nur imaginäres Zeug von der Programmiersprache zur Unterstützung des Programmierers.

    WerWieWas schrieb:

    ja, das war auch nicht meine frage... meine frage ist eher macht es sinn die variablen die ich nutze so nah wie möglich "zusammen" auf den stack zulegen so das der stackpointer weniger "springen" oder "verschoben" werden muss? 😕

    Wurde auch schon gesagt aber: Es wird immer gleich viel Stackspeicher pro Funktion benutzt, ganz egal wo oder wann oder ob Variablen definiert werden. Da wird nicht nach und nach mehr Speicher belegt...

    WerWieWas schrieb:

    würde eine deratige optimierung sinn machen? wenn ja merkt man diesen bei "vielen" variablen (ca 100 versch.) ?

    Ne.

    WerWieWas schrieb:

    man kann speicherbereiche auch direkt adressieren 😉 ...

    Und das hat was genau mit dem zu tun, was TNA geschrieben hat?

    WerWieWas schrieb:

    bitte ordentl. lesen...

    lol, kommt vom Richtigen. Mal bitte vom hohen Ross hinuntersteigen.

    WerWieWas schrieb:

    - ob es geschwindigkeitsvorteile hat die variablen "in logischer" reihenfolge zu speichern so das der stackpointer evt. weniger springen müssen um versch. bereiche zulesen... ?

    Nein, der springt genau ein einziges Mal und zwar ganz am Anfang. Dann bleibt er für den ganzen Scope gleich gross. Hat Kellerautomat schon vor 'ner Weile mehrfach betont.

    was regst du dich denn so auf?
    mich hat es geärgert das ich eine ordentliche frage stelle und eine für mich wenig aussagende antwort bekam, eig kam ich mir herabgewürdigt vor... ist mir eig auch zu blöd das geflame... meinet wegen hast du recht 😉 (wenns dich glücklich macht) ...

    entschuldigung wenn ich mich geirrt habe und ich wollte ja eigentlich mehr darüber lernen ... ich habe nur eine lösung für mein verständinisproblem gesucht...
    wahrscheinlich in zukunft in einer anderen community... 🙄

    sry falls ich i.was herabwertendes oder ähnliches von mir gegeben habe war nicht meine absicht ...
    wollte hie rniemand angreifen oder beleidigen oder sonst was ...
    danke für alle antworten
    schön tag noch...

    problem hat sich erledigt, thema kann geschlossen werden...

    "wenn mein bs einen stack und heap hat ist das zufall?!"
    was bitte ist denn zufall? 😃
    den zufall welches system ich benutze? 😃
    alles klar ... :p



  • WerWieWas schrieb:

    "wenn mein bs einen stack und heap hat ist das zufall?!"
    was bitte ist denn zufall? 😃
    den zufall welches system ich benutze? 😃
    alles klar ... :p

    So in etwa. Dein Computer braucht keinen Stack und keinen Heap um C++-Programme ausführen zu können. Die Daten können auch mit Kokosnüssen oder mit einem wasserbetriebenen Bambuscomputer ( 😉 ) gespeichert werden und dennoch C++-Standard-konform sein.



  • asfdlol schrieb:

    WerWieWas schrieb:

    "wenn mein bs einen stack und heap hat ist das zufall?!"
    was bitte ist denn zufall? 😃
    den zufall welches system ich benutze? 😃
    alles klar ... :p

    So in etwa. Dein Computer braucht keinen Stack und keinen Heap um C++-Programme ausführen zu können. Die Daten können auch mit Kokosnüssen oder mit einem wasserbetriebenen Bambuscomputer ( 😉 ) gespeichert werden und dennoch C++-Standard-konform sein.

    joa das meinte ich 😃 ...


Anmelden zum Antworten