七、變量在內存中的位置和訪問方式

7.1?全局變量和局部變量的區(qū)別

定義全局變量:?int g_nVariableType=117713190;

然后獲取全局變量的內存地址:

通過調試獲取全局變量所在地址 0x00421A30 ,地址中的數據為 0x07042926,轉換為十進制為 117717190.?全局變量在文件中的地址定位和常量?相同,也需要減去基地址,然后查閱節(jié)表得到文件地址。本示例中基地址為0x00400000,它的全局變量對應在文件0x00021A30的偏移地址處

在訪問方式?上,局部?變量的訪問是通過棧指針相對間接訪問,而全局變量的內存地址在全局數據中,通過棧指針無法訪問到。訪問全局變量和訪問常量類似--都是通過立即數來訪問。

7.2?局部靜態(tài)變量的工作方式

局部靜態(tài)變量與全局變量都保存在執(zhí)行文件中的數據區(qū)中,局部靜態(tài)變量會預先被作為全局變量處理,而它的初始化部分只是在做賦值操作而已。

7.3?堆變量

在C\C++中,使用malloc與new實現堆空間的申請,返回的數據便是申請的堆空間的地址。相對應的,使用free與delete完成堆空間釋放,但需要申請堆空間時得到的首地址。如果這個首地址丟失將無法釋放堆空間,從而導致內存泄漏。

保存堆空間首地址的變量大小為4字節(jié)的指針類型,其訪問方式按作用域來分,和之前所介紹的全局,局部?以及靜態(tài)的表現形式相同。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容