程序數據放置在系統存儲空間里
1. 當計算機執行某一程序時,其運行時程序段應存儲在__ 內存嗎為什麼
一共六個不同的地方存儲數據:
寄存器(在CPu里,內存地址訪問) 堆棧 堆 靜態存儲 常量存儲 非RAM存儲
程序運行時,系統將為程序分配一塊存儲空間
目標程序區:用來存放目標代碼
靜態數據區:用來存放編譯時就能確定存儲空間的數據
運行棧區:用來存放運行時才能確定存儲空間的數據
運行堆區:用來存放運行時用戶動態中請存儲空間的數據。
2. C++程序運行過程中,各種類型的數據都是怎麼存儲的,主要存儲在哪些空間里
有5大存儲區域:
1:堆區 主要是用戶自己申請的內存,如new 運算符申請的內存空間
2:棧區 先進後出的存儲結構,局部變數,函數的調用,等
3:靜態存儲區 放局部,全局的靜態變數,和全局的變數 生命周期是整個應用程序
4:寄存器 系統調用
5:程序代碼區 你寫的代碼也需要放在內存中!
3. 程序數據存儲在什麼地方
不過,寄存器的數量十分有限,所以寄存器是根據需要由編譯器適當地分配。作為一個程序員,我們對此沒有直接的控制權,也沒辦法在程序里頭感覺到寄存器的任何存在跡象。 Stack 棧位於一般的RAM(random-access memory,隨機訪問內存)中。處理器通過其指針(「棧指針」,stack pointer)獲得處理的直接支持。棧指針若向下(後)移,會分配新的內存;若向上(前)移,則會釋放那些內存。這是一種特別快、特別有效率的數據存儲方式,速度僅次於寄存器。由於Java編譯器有責任產生「將stack指針前後移動」的程序代碼,所以它必須能夠完全掌握它所編譯的程序中「存在stack里頭的所有數據的實際大小和存活時間」。如此一來便會限製程序的彈性。由於這個限制,盡管有些Java數據要存儲在棧里——特別是對象句柄,但Java對象並不放到其中。 Heap 堆Heap是一種通用性質的內存存儲空間(也存在於RAM中),用來置放所有Java對象。「內存堆」或「堆」(Heap)勝過stack之處在於,編譯器不需知道究竟得從堆里分配多少存儲空間,也不需知道從堆上分配的空間究竟要存活多長的時間。因此,用堆存儲數據時會得到更大的靈活性。要求創建一個對象時,只需用new即可。執行這些代碼時,會在堆里分配空間。當然,為達到這種靈活性,必然會付出一定的代價:在堆里分配存儲空間時會比從棧里分配花掉更長的時間(假設你真的可以在Java中像C++一樣地從stack上產生對象的話)! Static Storage 靜態存儲空間 這兒的「靜態」(Static)是指「位於固定位置」(也在RAM里頭)。靜態存儲空間存放著「程序運行期間」一直存在的數據。可用static關鍵字將某個對象內的特定成員設為靜態,但Java對象本身永遠都不會置入靜態存儲空間。 Constant Storage 常量存儲空間 常量值通常被直接置於程序代碼里頭。因為它們永遠都不會改變,所以也是安全的。有的常數需要嚴格地保護,所以可考慮將它們置入只讀存儲器(read-only memory,ROM)中。 Non-RAM Storage 非RAM存儲空間 若數據完全存活於程序之外,則程序不運行時數據仍繼續存在,脫離了程序的控制范圍。其中兩個最主要的例子便是「串流化對象(streamed objects)」和「持久性對象(persistent objects)」。在串流化對象形式中,對象會被轉換為一連串的位元組(bytes)流,這些bytes通常會被傳送給另一台機器。而在持久性對象形式中,對象被存儲於磁碟,即使程序運行結束,這些對象還能夠繼續保有。這種類型的存儲空間的特點在於,它們能夠將對象轉換為可存儲於其他媒介的形式,並在需要時,將所存儲的數據還原成可存儲於RAM中的一般對象。Java提供了對「輕量級持久性(Lightweight persistence)」的支持。新版本有可能提供更完善的解決方案。
4. android的程序運行數據存放在哪裡
微信運行時讀取的個人信息,和使用流量這些數據信息,是來自資料庫,在系統的data/data/目錄下有各個程序的數據存儲,比如說MMS在com.android.mms下有個databases文件夾下就有XXX.db文件存放簡訊相關的數據信息,微信的包名我不知道叫什麼,但肯定也是在data/data文件夾下,微信安裝的APK,不是系統應用,安裝目錄在data/app目錄下。
而圖片、聲音和影像之類的東西存在sd卡中,如果有緩存的話,肯定也是在sd卡中有專門生成的目錄,這個你都已經找到了。
