[英]C++ memory, allocation
由於首尾地址相同或&pi和a中的地址相同,a中的地址是來自常量數據段還是空閑存儲區?
int main()
{
const int pi = 10;
cout <<"This is constant memory area's address " << &pi << endl;
int *a = new int;
cout << "This is free store memory area's address " << a << endl;
a = (int*) π
cout << *a << endl;
cout << "This is free store memory area's address " <<a << endl;
return 0;
}
你的概念不正確。 您的程序存在副作用或限制。
該聲明:
const int pi = 10;
聲明一個常量。 編譯器可以將常量放在任何它想要的地方。
以下是一些可能的位置:
但是,在您獲取常量地址的那一刻,編譯器無法將值存儲在以下位置:
move reg_a, #10
此外,指針也可以存在於寄存器中。 但是,獲取指針的地址可以防止指針存在於寄存器中,因為使用&
運算符要求變量存在於可尋址的內存位置中,而寄存器不能通過指針尋址。
順便說一句,你有內存泄漏:
a = new int;
a = π
最后一條語句丟失或泄漏了動態分配的整數的位置。
注意:有些處理器中的寄存器位於內存中的可尋址位置; 但這些都是例外。
編輯 1:符號表
當你將一個變量聲明為const
並為其賦值時,編譯器可以將該變量存儲在一個 <symbol, value> 表中,而不占用程序中的任何變量空間。
當編譯器遇到符號時,例如pi
,它可以在其表中查找符號pi
並替換值 (10)。 所以表達式:
int b = pi;
替換后會變成:
int b = 10;
因此,您的pi
變量在您的程序中沒有任何分配的空間。 在上面的例子中,變量的值被放入你的程序中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.