Sửa đổi:Địa chỉ của Ngăn xếp và Heap trong C++
Tôi đã nhầm lẫn với khái niệm địa chỉ con trỏ và địa chỉ con trỏ trỏ tới, vì vậy mã sau đây đã được sửa đổi. Và bây giờ nó in ra những gì tôi muốn, biến a, c, i, j, k, p là trên ngăn xếp, và biến b, d là trên đống. Các biến tĩnh và toàn cục nằm trên một phân đoạn khác. Cảm ơn rất nhiều vì tất cả các bạn!
Vâng, tôi biết rằng hai khái niệm này sẽ được thảo luận sâu sắc ... nhưng tôi vẫn còn thắc mắc cho đoạn mã sau:
#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;
}
kết quả của tôi là:
&a: 0x28ff20
&b: 0x7c2990
&i: 0x28ff1c
&N: 0x443000
&c: 0x28fef3
&d: 0x7c0f00
&j: 0x28feec
&k: 0x28fee8
&l: 0x443004
&m: 0x443008
&p: 0x28ff00
này là khá thú vị, coz ngoại trừ biến toàn cầu N, và hai biến tĩnh trong hàm f, là l và m, địa chỉ của tất cả các biến khác dường như cùng nhau. (Lưu ý: Mã và kết quả đã được sửa đổi và không tương ứng với những gì được nói ở đây.)
Tôi đã tìm kiếm rất nhiều về ngăn xếp và đống. Ý nghĩa chung là, nếu một đối tượng được tạo ra bởi "mới", thì nó nằm trên heap. Và các biến cục bộ (như j và k trong mẫu trên) đang ở trên stack. Nhưng có vẻ như không phải là trường hợp trong ví dụ của tôi. Liệu nó phụ thuộc vào các trình biên dịch khác nhau, hoặc sự hiểu biết của tôi là sai?
Cảm ơn rất nhiều vì tất cả các bạn.
Tôi không hiểu câu hỏi của bạn tại sao bạn cho rằng một biến nằm trên chồng hoặc đống dựa trên địa chỉ bạn đã hiển thị. –
Điều này thực sự là vô nghĩa. Bạn không thể thực hiện bất kỳ loại suy luận về nơi bộ nhớ của bạn là – Falmarri
có thể trùng lặp của [Sử dụng chồng và đống đúng cách trong C++?] (Http://stackoverflow.com/questions/599308/proper-stack-and-heap-usage -in-c) –