動態(tài)ip和靜態(tài)ip的區(qū)別 堆、棧、動態(tài)內(nèi)存、內(nèi)存,它們的區(qū)別和聯(lián)系?
堆、棧、動態(tài)內(nèi)存、內(nèi)存,它們的區(qū)別和聯(lián)系?在C中,內(nèi)存分為五個(gè)區(qū)域,即堆、堆棧、空閑存儲、全局/靜態(tài)存儲和常量存儲。1堆棧是編譯器在需要時(shí)分配的變量的存儲區(qū)域,在不需要時(shí)自動清除。變量通常是局部變量、
堆、棧、動態(tài)內(nèi)存、內(nèi)存,它們的區(qū)別和聯(lián)系?
在C中,內(nèi)存分為五個(gè)區(qū)域,即堆、堆棧、空閑存儲、全局/靜態(tài)存儲和常量存儲。1堆棧是編譯器在需要時(shí)分配的變量的存儲區(qū)域,在不需要時(shí)自動清除。變量通常是局部變量、函數(shù)參數(shù)等。堆是由new分配的內(nèi)存塊。它們的發(fā)布不是由編譯器管理的,而是由我們的應(yīng)用程序控制的。通常,new對應(yīng)于delete。如果程序員不釋放它,操作系統(tǒng)將在程序完成后自動回收它。三。空閑內(nèi)存區(qū)是malloc分配的內(nèi)存塊。它與heap非常相似,但它以free結(jié)束其生命。4全局/靜態(tài)存儲區(qū)域。全局變量和靜態(tài)變量分配給同一塊內(nèi)存。在以前的C語言中,全局變量分為初始化和未初始化。在C語言中沒有這種區(qū)別,它們共享同一塊內(nèi)存。5固定存儲區(qū)域。這是一個(gè)特殊的儲藏區(qū)。它們存儲常量,不允許修改(當(dāng)然,您可以通過不適當(dāng)?shù)姆绞叫薷乃鼈儯分為這些儲存區(qū)。1堆棧-由編譯器自動分配和釋放。2堆-一般來說,它是由程序員分配和釋放的。如果程序員不發(fā)布它,它可能會在程序結(jié)束時(shí)被操作系統(tǒng)回收。三。全局區(qū)域(static area),全局變量和靜態(tài)變量的存儲放在一個(gè)區(qū)域,初始化的全局變量和靜態(tài)變量放在一個(gè)區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量放在另一個(gè)相鄰區(qū)域。-此外,常量還有一個(gè)特殊的位置。-程序的局部變量存在于(stack),全局變量存在于(static area),動態(tài)應(yīng)用程序數(shù)據(jù)存在于(stack)(stack實(shí)際上是寄存器EBP和ESP指向的一塊內(nèi)存空間(EBP指向棧的底部,ESP指向棧的頂部)。原則上,它是一塊從高地址到低地址的空間。它將存儲一些臨時(shí)數(shù)據(jù),例如函數(shù)中的臨時(shí)變量和返回地址。數(shù)據(jù)訪問是先進(jìn)先出,后進(jìn)先出。全局變量實(shí)際上,有一個(gè)(一般來說,一個(gè)普通的編譯器)可讀寫的內(nèi)存空間。這個(gè)空間固定在您編寫程序并編譯它的空間中(由編譯器決定)。堆是由操作系統(tǒng)管理的一塊空間,它不是預(yù)先在進(jìn)程空間中分配的(例如,如果在不分配堆的情況下訪問堆空間,則會報(bào)告內(nèi)存訪問錯(cuò)誤)。這只是對該概念的簡要描述。如果你想深入研究這三個(gè)空間的結(jié)構(gòu),仍然有一些復(fù)雜性
不同。A) 靜態(tài)內(nèi)存分配在編譯時(shí)完成,動態(tài)內(nèi)存分配運(yùn)行時(shí)不占用CPU資源,分配和釋放都占用CPU資源。b) 靜態(tài)內(nèi)存在堆棧上分配。c) 動態(tài)內(nèi)存分配需要指針和引用類型支持,而靜態(tài)內(nèi)存分配則不需要。d) 靜態(tài)內(nèi)存分配是按照計(jì)劃分配的,由編譯器負(fù)責(zé)。動態(tài)內(nèi)存分配是按需分配的,由程序員負(fù)責(zé)。
堆棧和棧有什么區(qū)別?
靜態(tài)數(shù)組定義為在堆棧上分配空間,在運(yùn)行時(shí)不能更改,例如,動態(tài)數(shù)組的大小在運(yùn)行時(shí)給定,即在運(yùn)行時(shí)在堆上分配一定量的存儲空間,其大小在運(yùn)行時(shí)可以更改,例如,
int*A
A=New int[10]