c語言虛擬內存
㈠ c語言malloc函數當申請的空間大於內存時是否會使用虛擬內存
虛擬內存是現代計算機一個很重要的技術基礎,不是malloc申請的空間大於內存時才會使用虛擬內存,而是一直分配的都是虛擬內存,有時候可以說,正是因為引入了虛擬內存,才使得動態內存分配如此簡單。。沒事歡迎來0x30 網路貼吧耍耍,共同分享學習c/c++
㈡ linux系統下的C語言中的虛擬內存分配問題
因為內存管理由glibc管理,當它認為需要釋放時,才釋放前提是,你已經讓它釋放了,說的簡單就是,你讓它釋放,它要過一段時間等合適了,再釋放
㈢ 如何用c語言實現虛擬內存
關注一下,期待高手
可以使用Windows 的FileMapping功能 把文件映射到內存進行管理.
具體函數如下:
CreateFileMapping
FlushViewOfFile
MapViewOfFile
MapViewOfFileEx
OpenFileMapping
UnmapViewOfFile
For Virtual Memory. You can use a series of function provided in WindowsNT, it includes:
VirtualAlloc()
VirtualAllocEx()
VirtualFree()
VirtualQuery()
VirtualProtect()
VirtualLock()
VirtualUnlock()
GetProcessWorkingSetSize()
SetProcessWorkingSetSize()
etc..
You can get familiar with them through MSDN
另備注一份網址:希望對你有用。
㈣ C語言 argc,argv,env是載入到 虛擬內存的 棧區 還是 什麼地方
main也是一個函數,只要是函數,參數統統放在函數棧幀的底部。
㈤ C語言:內存分哪幾個區各有什麼用
32位操作系統中有4G的虛擬內存,1、os區為系統所佔內存 2、棧區auto區的內存是自動分配的,不需要malloc申請 3、堆區需要自己申請所要用的內存,在用的同時,用完之後要用free釋放,防止內存泄漏 4、靜態區分中有BSS區.文本區.常量區
㈥ c語言中數組裡面的每一個
使用C語言編程,實際上使用的內存只有一種——虛擬內存。根據功能的不同在C語言中又將虛擬內存為分三類:棧區、堆區、靜態數據區,無論單一變數還是數組,其內存分配都是如此。其中,棧區、靜態數據區、堆區都會有編譯器負責分配、操作系統負責管理,程序員可以在堆區使用malloc()來動態分配堆內存。1、棧區:一般每一個函數對應一個棧區,在編譯原理中稱為棧幀。比如下面的代碼:int main(){//定義一個有20個int元素的數組。此時數組a分配的虛擬內存稱為棧區,有編譯器自行分配。 int a[20] = {0}; return 0;}2、靜態數據區:這實際上對應於生成的可執行文件的.data區段,因為這個區段在生成的可執行文件中,因此是「靜態的」。比如下面的代碼://定義一個20個int元素的全局數組,此時數組分配的虛擬內存稱為靜態數據區,有編譯器自行分配。int g_a[20]; int main() { return 0;}3、堆區:堆區是最復雜的,有操作系統負責堆管理,但是當用C語言編譯器生成一個可執行文件並且運行時,它會默認建立一些堆。拿Windows來說,每一程序運行,它會建立至少兩個堆,一個是默認堆,一個是new堆。比如下面的代碼:int main(){ int *pa = (int*)malloc(sizeof(int)*20);//分配20個int元素大小的堆空間。 return 0;}
㈦ C語言中內存是什麼意思
當然是內存條。硬碟又叫「外存」,只有進行文件操作時才需要涉及硬碟。
㈧ C或C++程序編譯時內存分為幾個存儲區
1、從操作系統原理的角度來看,只有一個存儲區就是虛擬內存。
2、根據功能可以分為 ,棧區 、堆區、靜態區, 棧區一般指的一個函數局部變數,在編譯原理中這叫做一個棧幀。 堆區一般是為了用戶自由分配的,一般C語言中用MALLOC函數分配,C++中用NEW運算符來分配,它是有操作系統的堆管理器來管理的,拿windows來說,在一個程序運行後,一般至少有兩個默認的堆,一個是new堆,一個進程 自己的堆, 靜態區,這個一般是全局變數或者static變數使用的區域,這個區域,如果你對PE結構熟悉,就會明白這實際上是pe 區段中的.data區段,當程序運行後變成進程,這個區段是直接內存文件映射過去的。
㈨ 關於C語言的指針與虛擬地址,物理地址的關系問題
由於WINDOWS是一個實時多任務的操作系統,所以系統為每個進程(以32位進程為例)4G內存,所以每個進程看起來都擁有4GB的內存,但是該內存為虛擬內存空間,如果空間不夠還會使用硬碟進行虛擬。4G的內存,操作系統佔用2G,應用可以使用2G。所以c語言的指針一定是指向了虛擬的地址,而具體的物理地址由操作系統調度和調配。
㈩ c語言malloc函數當申請的空間大於內存時是否會使用虛擬內存
c語言不作這方面的判斷,這是操作系統的事.
c語言程序直接將申請內存的請求發送給操作系統,操作系統會根據具體情況來處理,需要使用虛擬內存就使用,但在c語言程序來看,得到的內存與物理內存是一樣的.
一般程序編譯時會指定自己的堆有多大,malloc在堆中申請,如果超過堆的尺寸會申請失敗;程序在啟動時,向操作系統申請堆空間,一般不會是在運行時才申請堆空間的.