Adresse der register-Variablen in C und C++

Ich weiß, das Konzept des register-variable und es Anwendungsfälle, aber es gibt einige Fragen in meinem Kopf auf, was ich ausprobiert habe.

  1. Ich kann nicht auf die Adresse der register-Variablen in C kann ich zwar tun Sie es C++! Warum? Gibt es irgendein Problem beim Zugriff auf die Adressierung des register-variable?

  2. Nehme an, wenn ich deklarieren Sie eine string-variable in C++ als registrieren, dann wo wird diese variable gespeichert werden? Was ist der Punkt in der Deklaration der storage-Klasse von nicht-numerischen Datentypen wie "string" in C++ zu registrieren??

UPDATE:
Ich dachte, dass C++ erlaubt es uns zu Holen, die Adresse der register-Variablen, da war ich nicht immer alle Fehler in meinem Programm ist wie folgt:

#include<iostream>
#include<time.h>

using namespace std;

clock_t beg, en;

int main(){

    int j, k=0;

    beg=clock();
    for(register int i=0;i<10000000;i++){
        /*if(k==0){
            cout<<&i<<endl;    //if this code is uncommented, then C++ rejects the recommendation to make 'i' as register
            k++;
        }*/
    }
    en=clock();

    cout<<en-beg<<endl;

    cout<<&j<<endl<<&k;

    return 0;
}

Was ich beobachtet habe ist, wenn ich die variable 'i' als registrieren und versuchen Sie nicht, drucken Sie die Adresse mit '&' ich mir dann C++ akzeptiert die Empfehlung und speichert 'ich' im register, dieses kann geschlossen werden aus der Laufzeit der for-Schleife, die immer um 4-12 ms, wenn 'ich' ist im register. Aber wenn ich versuchen zu drucken, die Adresse der variable 'i' dann, obwohl ich nicht keine Fehler bekommen aber C++ lehnt die Empfehlung und dieser kann geschlossen werden ab dem Zeitpunkt der Ausführung der Schleife, die sich immer mehr als 25, wenn ich mich nicht registrieren!!

So, im Grunde kann ich nicht abrufen Adresse einer Variablen mit storage class als register sowohl in C als auch C++!! WARUM?

  • Register-Variablen haben keine Adressen.
  • U sagen, es gibt keine Adresse ein register? Wie kommen computer weiß dann, in welchem register die variable 'i' wird gespeichert?
  • "Ich weiß, dass das Konzept des register-variable". NEIN, DU NICHT!!!
  • Dann lassen Sie es mich bitte wissen! Bitte korrigieren Sie mich.
  • keine anderen Kommentare und die Antwort haben bedeckt es.
  • Der Speicherort von i ist bestimmt durch den compiler, die es in einem register oder auf den stack. Der computer oder die CPU nicht "weiß" nichts-es läuft nur der binäre code, der vom compiler erzeugt.
  • Im Allgemeinen ein register, eine register-Nummer, die in der Art einer Adresse. Jedoch, wieder im Allgemeinen, verschiedene Maschinen-Anweisungen werden verwendet, um die Adresse eines Registers als Adresse an den Speicher.
  • Betrachten Sie die Montage, wo die Register-und Speicher-Adressen sind sehr unterschiedlich. Betrachten wir nun, dass der compiler wandelt den code in assembly.
  • mögliche Duplikate von Adresse der register-Variablen Hat eine gute Beschreibung, warum es funktioniert in C++.
  • So registriert haben keine Adressen? Sie verwiesen wird, die Namen sagt A, B, C..? und somit kein Punkt zu Holen Adresse einer variable gespeichert im register? Ist es?
  • Funktioniert es wirklich in C++?? Haben Sie gelesen oder ausprobiert, was ich geschrieben in meiner Frage?
  • Auf x86 -, register Verweise sind hardcoded in den Maschinen-code Anweisungen.
  • registriert haben Namen. auf x86 -, Sie verwiesen als eax, ebx, ecx etc. in der Montage mnemonischen Befehle. In x64, Sie sind rax, rbx, rcx usw.
  • OK! Das ist cool! Und was ist mit nicht-numerischen Datentypen wie "string" in C++? Wohin gehen Sie, wenn angegeben, wie registrieren?
  • "Adresse" in diesem Kontext bedeutet "Ort im virtuellen Speicher". So kann man nicht auf die Adresse eines Registers, eine Datei auf der Festplatte, eine Banane, oder deine Mutter-in-law ' s Hund, denn Sie befinden sich nicht im virtuellen Speicher.
  • Ein std::string Objekt in der Regel nicht passen in ein register, so der Hinweis ignoriert werden. Sollten Sie einfach vergessen, über die register Schlüsselwort, einschalten der compiler-Optimierungen, und lassen Sie den compiler ausführen, diese Mikro-Optimierungen.
  • Ya string passt nicht in ein register. So what? Die Anfrage wird ignoriert, sofort? Wie etwa der Speicherung im cache?
  • Der compiler in der Regel nicht machen, Entscheidungen über was zu speichern im cache, da der Prozessor tut es in der hardware. (Das ist nicht zu sagen, Sie kann es nicht, aber auf den meisten Architekturen alles Sie Zugang erhalten, die im cache gespeichert, es sei denn, Sie verwenden spezielle Anweisungen, die bypass-cache).
  • Nein, mein Motiv ist nicht, dass...
  • Ihr Verhalten ist.
  • Versuchen Sie, die Codierung etwas in der Montage. Es wird Ihnen helfen zu verstehen, die Idee von Registern vs Speicher.
  • oder noch besser: füttern Sie Ihre Beispiel-Programm für den compiler und es erzeugt eine Liste der assembly.
  • Vielen Dank an alle für Eure Hilfe und ich entschuldige mich für mein Verhalten... Sie Menschen sind wirklich genial.

InformationsquelleAutor kunal18 | 2013-07-09
Schreibe einen Kommentar