1
通常,靜態變量和全局變量都根據其初始化條件存儲在.data或.bss節中。據說他們的生活時間是從程序的開始到結束,並且也知道程序在分頁管理中被要求時作爲頁面加載到內存中。這是否意味着.data和.bss段應該在訪問之前或者在第一條指令前加載到內存中?應該在程序執行之前加載存儲在.data或.bss段中的靜態或全局數據嗎?
通常,靜態變量和全局變量都根據其初始化條件存儲在.data或.bss節中。據說他們的生活時間是從程序的開始到結束,並且也知道程序在分頁管理中被要求時作爲頁面加載到內存中。這是否意味着.data和.bss段應該在訪問之前或者在第一條指令前加載到內存中?應該在程序執行之前加載存儲在.data或.bss段中的靜態或全局數據嗎?
您正在處理兩個抽象層次。程序中訪問的所有內容都位於虛擬地址空間中,而.data/.bss段在程序執行開始時可用。更深入的抽象是虛擬地址空間由使用分頁的物理內存支持,由內存管理器管理。這對於加載進程的執行代碼和代碼來說完全是未知的。所以在這個級別上可能會有部分.data/.bss(或者甚至是你的代碼)在主內存中不存在,因爲物理頁面沒有被加載,通常這些會在需要時加載,因爲它們對應的虛擬地址被引用。
谷歌的東西,如「內存管理」,「虛擬內存」,「分頁」的更多信息。