※ 引述《wa007123456 (大笨羊)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 問題(Question):
: 我們都知道 為了要讓指標能夠正常運作
: 必須要宣告指標的型別
: 當指標在跳位置取值的時候 才不會跳錯
: 但是小弟今天有一個疑惑
: "那儲存指標的型別資訊是儲存在計算器的哪一部分?"
: 也就是說 她怎麼記得這個指標是屬於哪個型別
int main()
{
int i, j;
}
編譯器要為 i, j 在記憶體留個位置, 所以需要知道 int i, j 要給多大,
寫 c 編譯器的人就要去查 c 規格書, 哦 int 我留個 4byte 就符合規格了。
所以會把 0x100 留給 i, 0x104 留給 j。
那如果是 int *p, *q; 呢?
編譯器要留 uintptr_t 的大小給 p, q, 假設 uintptr_t 是 4byte 好了,
所以把 0x108 給 p, 0x10b 給 p。
大小有了, 型別要怎麼紀錄呢? 用表格,
p, int *
q, int *
i, int
j, int
這樣編譯器就幫這些變數保留了大小, 也知道這些變數的型別。
0x100 ~ 0x10b 為虛構的位址, 依平台不同而不同。