我在Matlab中編程了相當多的研究生水平數值分析課程和統計模擬,但我現在試圖學習更通用的語言。我自學C++,使用Lippman的「C++ Primer」。在完成關於指針的部分的同時,我遇到了讓我困惑的事情。我編譯和運行下面的代碼:如何分配內存寄存器的名稱?
#include <iostream>
int main() {
int ival = 42;
int *p = &ival;
std::cout << p << std::endl;
}
我打算給這個給我的內存地址ival舉行,它似乎工作。這是輸出:
$ g++ pointer.cpp -o pointer
$ ./pointer
0x7fff5fbffa7c
這使我困惑了幾個原因。
1)這是一個12位十六進制數字。這似乎意味着至少有16^12(= 2^48)位(或字節)的可用存儲空間。但是,我安裝了4 GB的DDR3 RAM,所以我應該只有4 * 2^30字節= 32 * 2^30位= 2^35位的可用存儲空間。所以,我的問題是:這個地址是在RAM中,還是在處理器的緩存中?如果它在RAM中,RAM中的內存寄存器如何標記?或者,我完全脫離了商標?在我的RAM中看起來似乎不可能存在與每12位十六進制數相對應的存儲器寄存器(甚至是11位數字,如果最左邊的數字保持不變)。
2)每次運行程序時,ival都存儲在完全相同的地方。如果我重命名變量並改變它的值,這仍然是正確的。如果創建第二個變量,KVAL,它的位置是在:
0x7fff5fbffa78
4個字節IVAL的位置了。 (我現在假設地址以字節爲單位進行標記,因爲int使用4個字節。)C++編譯器在構建程序時是否總是以相同的內存地址開始?
我正在使用4GB DDR3 RAM和6 MB二級高速緩存(我知道這是一臺5年前的機器)的MacBook Pro,並且正在使用g ++編譯器。我希望最終能夠學會大會,真正理解這些事情是如何工作的,這就是爲什麼我要深入瞭解這一點。
我試圖在谷歌和Stack Overflow上找到這些信息,但一直沒有任何運氣。另外,據我所知,這在我正在處理的C++書中沒有得到解決。
預先感謝您的時間,請讓我知道是否有任何其他信息會有所幫助。
喬
謝謝你的回覆。這正是我正在尋找的。我覺得還有一些我不瞭解的東西。我感謝幫助! –