欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

c語言中malloc、realloc與calloc 的區(qū)別以及聯(lián)系

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

ANSI C說明了三個用于存儲空間動態(tài)分配的函數(shù)
(1) malloc分配指定字節(jié)數(shù)的存儲區(qū)。此存儲區(qū)中的初始值不確定

(2) calloc為指定長度的對象,分配能容納其指定個數(shù)的存儲空間。該空間中的每一位(bit)都初始化為0

(3) realloc  更改以前分配區(qū)的長度(增加或減少)。當(dāng)增加長度時,可能需將以前分配區(qū)的內(nèi)容移到另一個足夠大的區(qū)域,而新增區(qū)域內(nèi)的初始值則不確定

.分配函數(shù)時再分配 realloc()
使我們可以增、減以前分配區(qū)的長度(最常見的用法是增加該區(qū))。

如果先分配一個可容納長度為512的數(shù)組的空間,并在運(yùn)行時填充它,但又發(fā)現(xiàn)空間不夠,則可調(diào)用realloc擴(kuò)充該存儲空間。

如果在該存儲區(qū)后有足夠的空間可供擴(kuò)充,則可在原存儲區(qū)位置上向高地址方向擴(kuò)充,并返回傳送給它的同樣的指針值。

如果在原存儲區(qū)后沒有足夠的空間,則realloc分配另一個足夠大的存儲區(qū),將現(xiàn)存的5 1 2個元素數(shù)組的內(nèi)容復(fù)制到新分配的存儲區(qū)。

因為這種存儲區(qū)可能會移動位置,所以不應(yīng)當(dāng)使用任何指針指在該區(qū)中。

注意,realloc的最后一個參數(shù)是存儲區(qū)的newsize(新長度),不是新、舊長度之差。作為一個特例,若ptr是一個空指針,則realloc的功能與malloc相同,用于分配一個指定長度newsize的存儲區(qū)。

這些分配例程通常通過sbrk(2)系統(tǒng)調(diào)用實現(xiàn)。該系統(tǒng)調(diào)用擴(kuò)充(或縮小)進(jìn)程的堆。雖然sbrk可以擴(kuò)充或縮小一個進(jìn)程的存儲空間,但是大多數(shù)malloc和free的實現(xiàn)都不減小進(jìn)程的存儲空間。釋放的空間可供以后再分配,但將它們保持在malloc池中而不返回給內(nèi)核。

應(yīng)當(dāng)注意的是,大多數(shù)實現(xiàn)所分配的存儲空間比所要求的要稍大一些,額外的空間用來記錄管理信息——分配塊的長度,指向下一個分配塊的指針等等。這就意味著如果寫過一個已分配區(qū)的尾端,則會改寫后一塊的管理信息。這種類型的錯誤是災(zāi)難性的,但是因為這種錯誤不會很快就暴露出來,所以也就很難發(fā)現(xiàn)。

將指向分配塊的指針向后移動也可能會改寫本塊的管理信息。其他可能產(chǎn)生的致命性的錯誤是:釋放一個已經(jīng)釋放了的塊;調(diào)用free時所用的指針不是三個alloc函數(shù)的返回值等。因為存儲器分配出錯很難跟蹤,所以某些系統(tǒng)提供了這些函數(shù)的另一種實現(xiàn)方法。每次調(diào)用這三個分配函數(shù)中的任意一個或free時都進(jìn)行附加的出錯檢驗。在調(diào)用連接編輯程序時指定一個專用庫,則在程序中就可使用這種版本的函數(shù)。此外還有公共可用的資源(例如由4.3+BSD所提供的),在對其進(jìn)行編譯時使用一個特殊標(biāo)志就會使附加的運(yùn)行時間檢查生效。

因為存儲空間分配程序的操作對某些應(yīng)用程序的運(yùn)行時間性能非常重要,所以某些系統(tǒng)提供了附加能力。例如,SVR4提供了名為mallopt的函數(shù),它使進(jìn)程可以設(shè)置一些變量,并用它們來控制存儲空間分配程序的操作。還可使用另一個名為mallinfo的函數(shù),以對存儲空間分配程序的操作進(jìn)行統(tǒng)計。請查看所使用系統(tǒng)的malloc(3)手冊頁,弄清楚這些功能是否可用。

.alloca函數(shù)
還有一個函數(shù)也值得一提,這就是alloca。其調(diào)用序列與malloc相同,但是它是在當(dāng)前函數(shù)的棧幀上分配存儲空間,而不是在堆中。其優(yōu)點是:當(dāng)函數(shù)返回時,自動釋放它所使用的棧幀,所以不必再為釋放空間而費(fèi)心。其缺點是:某些系統(tǒng)在函數(shù)已被調(diào)用后不能增加棧幀長度,于是也就不能支持alloca函數(shù)。盡管如此,很多軟件包還是使用alloca函數(shù),也有很多系統(tǒng)支持它。

上一篇:snprintf函數(shù)的用法解析

欄    目:C語言

下一篇:解析linux 文件和目錄操作的相關(guān)函數(shù)

本文標(biāo)題:c語言中malloc、realloc與calloc 的區(qū)別以及聯(lián)系

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4271.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有