這裏是一個簡單的C++類:類成員和成員函數的內存位置
class A
{
public:
explicit A() : m_a(0) { }
explicit A(int a) m_a(a) { }
int getA() const { return m_a; }
void setA(int a) { m_a = a; }
private:
int m_a;
}
這是我目前所知:
- 當你聲明一個類的實例的對象,內存獲取分配給該對象。分配的內存相當於其成員的內存總結。所以,在我的情況
sizeof(A) = sizeof(int) = sizeof(m_a)
- A類的所有成員函數某處存儲在內存和A類的所有實例使用相同的成員函數。
這是我不知道:
在哪裏存儲成員函數和它們是如何實際存儲?假設一個int
例如存儲在4個字節上;我可以想象RAM存儲器佈局與4個連續的單元格,每個單元格存儲一部分int。我怎麼能想象這個佈局的功能?(這聽起來可能很愚蠢,但我認爲函數必須在內存中佔有一席之地,因爲你可以有一個指針指向它們)。還有如何以及在哪裏存儲功能指令?我的第一個看法是函數和函數指令存儲在程序可執行文件(及其動態或靜態庫)中,但是如果這是真的,那麼創建函數指針時會發生什麼? AFAIK函數指針指向RAM內存中的位置,它們可以指向程序二進制文件中的位置嗎?如果是的話,這是如何工作的?
任何人都可以向我解釋如何工作的,如果我知道什麼是對錯指出?
嗯,你不能執行不首先加載到RAM代碼... – molbdnilo
指針不指向內存,但虛擬內存。 –