国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
c語(yǔ)言內(nèi)存分配函數(shù)之間的區(qū)別

http://blog.csdn.net/slj_win/article/details/20461909

2014

malloca/alloca:

  內(nèi)存分配函數(shù),與malloc,calloc,realloc類似。但是注意一個(gè)重要的區(qū)別,_alloca是在棧(stack)上申請(qǐng)空間,用完馬上就釋放。

  alloca包含在頭文件malloc.h中,在某些系統(tǒng)中會(huì)宏定義成_alloca使用。

  注意:

  1)在調(diào)用 alloca的函數(shù)返回的時(shí)候, 它分配的內(nèi)存會(huì)自動(dòng)釋放。也就是說(shuō), 用 alloca 分配的內(nèi)存在棧上。所以釋放不需要用戶使用free.

  2)alloca不具可移植性,而且在沒(méi)有傳統(tǒng)堆棧的機(jī)器上很難實(shí)現(xiàn)。當(dāng)它的返回值直接傳入另一個(gè)函數(shù)時(shí)會(huì)帶來(lái)問(wèn)題,因?yàn)樗峙湓跅I稀?br>
  總結(jié):由于這些原因,alloca不宜使用在必須廣泛移植的程序中, 不管它可能多么有用。

  realloc:

  重新分配內(nèi)存并返回void類型,如果沒(méi)有足夠的內(nèi)存擴(kuò)展內(nèi)存塊,則原來(lái)的指向的內(nèi)存指針無(wú)變化,并返回NULL;如果重新分配大小設(shè)為0,而釋放原來(lái)的內(nèi)存塊, 并返回NULL.

  calloc:

  分配指定數(shù)目的元素,每個(gè)元素的大小由size指定, 并將其初始化為0,calloc調(diào)用malloc使用C++ _set_new_mode函數(shù)來(lái)設(shè)置新的處理方式,默認(rèn)情況下,malloc 失敗時(shí)不調(diào)用分配內(nèi)存的處理程序例程。

  malloc:

  從堆上分配指定大小的字節(jié)數(shù)并返回void類型,如分配失敗則返回NULL,malloc分配的字節(jié)數(shù)可能比指定的字節(jié)要多,這是由內(nèi)存對(duì)齊方式?jīng)Q定的,malloc實(shí)際上調(diào)用了HeapAlloc函數(shù), 因此malloc分配的內(nèi)存也不能跨進(jìn)程調(diào)用。

  new:

  分配內(nèi)存的對(duì)象或數(shù)組類型的對(duì)象和返回一個(gè)適當(dāng)類型,并調(diào)用對(duì)象的構(gòu)造函數(shù)及在delete時(shí)調(diào)用對(duì)象的析構(gòu)函數(shù)。其實(shí)現(xiàn)基于malloc調(diào)用。

  下面是windows系統(tǒng)提供的API函數(shù):

  1、VirtualAlloc/VirtualAllocEx

  在虛擬地址空間中保留或提交內(nèi)存, 每次操作大小為Page頁(yè)大小(windows一般為4K)的整數(shù)倍,因此需要自己計(jì)算內(nèi)存分配算法(可以使用HeapAlloc或GlobalAlloc由系統(tǒng)自動(dòng)分配計(jì)算),在沒(méi)有使用MEM_RESET的情況下會(huì)初始化內(nèi)存塊(0), VirtualAllocEx還可以在其他進(jìn)程中的保留內(nèi)存操作,并使用其對(duì)應(yīng)的VirtualFree/VirtualFreeEx釋放內(nèi)存

  2、HeapAlloc/HeapFree

  在指定的Heap中分配內(nèi)存,heap應(yīng)該由CreateHeap或GetProcessHeap返回,分配的內(nèi)存不能移動(dòng),CreateHeap創(chuàng)建的堆只能在調(diào)用的進(jìn)程中使用,因此如需跨進(jìn)程調(diào)用不能使用此種分配方式,由HeapFree釋放。

  3、GlobalAlloc/GlobalFree

  從全局堆分配指定字節(jié)的內(nèi)存,分配的內(nèi)存可跨進(jìn)程訪問(wèn),并使用8字節(jié)對(duì)齊方式, 由GlobalFree釋放,在使用GlobalAlloc分配的內(nèi)存塊時(shí)需調(diào)用GlobalLock和GlobalUnlock函數(shù)。

PS:為了更好的理解內(nèi)存分配,我們可以了解一下內(nèi)存分區(qū)。


  1)棧區(qū)(stack)- 由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

  2)堆區(qū)(heap) - 一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 .

  3)全局區(qū)(靜態(tài)區(qū))(static)-,全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。 -程序結(jié)束后有系統(tǒng)釋放。注意:全局區(qū)又可分為未初始化全局區(qū):.bss段和初始化全局區(qū):data段。

  4)常量區(qū)-常量字符串就是放在這里的。程序結(jié)束后由系統(tǒng)釋放

  5)代碼區(qū)-存放函數(shù)體的二進(jìn)制代碼。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
c中malloc realloc calloc 的區(qū)別和聯(lián)系 - 勝不驕敗不惱 - 51C...
內(nèi)存管理
程序分區(qū)模型(代碼實(shí)例解析)
UC頭條:[學(xué)習(xí)][記錄](méi) c語(yǔ)言:從放棄到入門(mén)(上)
C語(yǔ)言動(dòng)態(tài)存儲(chǔ)分配
16-高級(jí)指針
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服