Adresse von Stack und Heap in C++

Korrektur:

Ich Durcheinander mit dem Konzept der pointer-Adresse und die Adresse, die der Zeiger zeigt, also der folgende code wurde geändert. Und jetzt es druckt, was ich will, die variable a, c, i, j, k, p sind auf dem stack, und die variable b,d liegen auf dem heap. Statische und Globale Variablen werden auf einem anderen segment. Vielen Dank für Euch alle!


Gut, ich weiß, dass diese beiden Konzepte sind tief besprochen...aber ich habe noch Fragen für den folgenden code:

#include <iostream>
using namespace std;

class A {

};

int N = 10;

void f(int p) {
    int j = 1;
    float k = 2.0;
    A c;
    A* d = new A();
    static int l = 23;
    static int m = 24;
    cout << "&c: " << &c << endl;
    cout << "&d: " << d << endl;
    cout << "&j: " << &j << endl;
    cout << "&k: " << &k << endl;
    cout << "&l: " << &l << endl;
    cout << "&m: " << &m << endl;
    cout << "&p: " << &p << endl;
}

int main() {
    int i = 0;
    A* a;
    A* b = new A();
    cout << "&a: " << &a << endl;
    cout << "&b: " << b << endl;
    cout << "&i: " << &i << endl;
    cout << "&N: " << &N << endl;
    f(10);
    return 0;
}

Mein Ergebnis ist:

&a: 0x28ff20
&b: 0x7c2990
&i: 0x28ff1c
&N: 0x443000
&c: 0x28fef3
&d: 0x7c0f00
&j: 0x28feec
&k: 0x28fee8
&l: 0x443004
&m: 0x443008
&p: 0x28ff00

Dies ist ziemlich interessant, denn außer die Globale variable N und zwei statische Variablen in der Funktion f, die l und m, die Adressen aller anderen Variablen scheinen, zusammen zu sein. (Hinweis: Der code und die Ergebnisse wurden geändert und entsprechen nicht dem, was gesagt wird hier.)

Ich gesucht habe eine Menge über die stack und heap. Der common sense ist, dass, wenn ein Objekt erstellt wird, indem "new", dann ist es auf dem heap. Und lokale Variablen (wie j und k in dem obigen Beispiel) werden auf den stack. Aber es scheint nicht der Fall zu sein in meinem Beispiel. Kommt es auf verschiedenen Compilern, oder mein Verständnis falsch ist?

Vielen Dank für Euch alle.

  • Ich verstehe nicht, Ihre Frage, warum Sie denken, dass eine variable auf dem stack oder heap basiert auf den Adressen, die Sie gezeigt haben.
  • Das ist wirklich sinnlos. Sie können nicht machen, jede Art von Rückschluss darüber, wo Sie Ihr Gedächtnis ist
  • mögliche Duplikate von die Richtige stack-und heap-Verwendung in C++?
  • Ich weiß nicht, wie die vorgeschlagenen duplizieren, aber am voting für die NaRQ da wurde der Beitrag basiert auf einem Missverständnis über die OP, und jetzt, dass dies gelöscht wurde, es ist keine Frage mehr. @Zhongxia: Wenn Sie noch interessiert sind, was hier vorgeht, möchten Sie vielleicht zu Lesen, auf das "data segment".
Schreibe einen Kommentar