最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年08月15日 09:20:48   作者:  
以下是對c語言中的malloc函數(shù),realloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進行了介紹,需要的朋友可以過來參考下

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

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

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

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

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

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

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

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

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

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

應(yī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時都進行附加的出錯檢驗。在調(diào)用連接編輯程序時指定一個專用庫,則在程序中就可使用這種版本的函數(shù)。此外還有公共可用的資源(例如由4.3+BSD所提供的),在對其進行編譯時使用一個特殊標志就會使附加的運行時間檢查生效。

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

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

相關(guān)文章

  • 一篇文章弄懂C++左值引用和右值引用

    一篇文章弄懂C++左值引用和右值引用

    左值(lvalue)和右值(rvalue)是 c/c++ 中一個比較晦澀基礎(chǔ)的概念,這篇文章主要給大家介紹了關(guān)于如何通過一篇文章弄懂C++左值引用和右值引用的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C語言近萬字為你講透樹與二叉樹

    C語言近萬字為你講透樹與二叉樹

    樹是計算機算法最重要的非線性結(jié)構(gòu)。因為樹能很好地描述結(jié)構(gòu)的分支關(guān)系和層次特性,所以在計算機科學(xué)和計算機應(yīng)用領(lǐng)域有著廣泛的應(yīng)用。這篇文章我就帶大家一起了解一下樹、二叉樹這種結(jié)構(gòu),下篇文章會重點向大家介紹二叉樹的遍歷算法
    2022-05-05
  • C++用winapi?socket實現(xiàn)局域網(wǎng)語音通話功能

    C++用winapi?socket實現(xiàn)局域網(wǎng)語音通話功能

    這篇文章主要介紹了socket實現(xiàn)局域網(wǎng)語音通話?c++?winapi,功能介紹支持錄音設(shè)備查找以及播放設(shè)備查找,支持局域網(wǎng)語音通話,通話包含語音來電提醒和掛斷電話的提示信息,還能實時的獲取在線用戶的數(shù)量以及對應(yīng)的id,需要的的朋友一起看看
    2022-06-06
  • 如何在c語言下關(guān)閉socket

    如何在c語言下關(guān)閉socket

    如果不主動關(guān)閉socket的話,系統(tǒng)不會自動關(guān)閉的,除非當前進程掛掉了,操作系統(tǒng)把占用的socket回收了才會關(guān)閉。下面小編來簡單介紹下
    2019-05-05
  • C++泛型編程綜合講解

    C++泛型編程綜合講解

    泛型編程與面向?qū)ο缶幊痰哪繕讼嗤词怪赜么a和抽象通用概念的技術(shù)更加簡單。但是面向?qū)ο缶幊虖娬{(diào)編程的數(shù)據(jù)方面,泛型編程強調(diào)的是獨立于特定數(shù)據(jù)類型
    2022-12-12
  • C和C++的函數(shù)調(diào)用約定你知道多少

    C和C++的函數(shù)調(diào)用約定你知道多少

    這篇文章主要為大家詳細介紹了C和C++的函數(shù)調(diào)用約定,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++入門概覽和嘗試創(chuàng)建第一個C++程序

    C++入門概覽和嘗試創(chuàng)建第一個C++程序

    這篇文章主要介紹了C++入門概覽和嘗試創(chuàng)建第一個C++程序,同時也包括編寫類的示例展示C++面向?qū)ο蟮奶匦?需要的朋友可以參考下
    2015-09-09
  • C++中返回指向函數(shù)的指針示例

    C++中返回指向函數(shù)的指針示例

    int (*ff(int)) (int *,int);表示:ff(int)是一個函數(shù),帶有一個int型的形參,該函數(shù)返回int (*) (int *,int),它是一個指向函數(shù)的指針,所指向的函數(shù)返回int型并帶有兩個分別是Int*和int型的形參
    2013-09-09
  • C語言和go語言之間的交互操作方法

    C語言和go語言之間的交互操作方法

    下面小編就為大家?guī)硪黄狢語言和go語言之間的交互操作方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 利用C語言替換文件中某一行的方法

    利用C語言替換文件中某一行的方法

    大家都知道C語言提供了文件操作,但是替換文件的某一行比較麻煩,下面是我使用的一個方法,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒。
    2016-09-09

最新評論

威远县| 武宣县| 华池县| 郯城县| 牡丹江市| 佛冈县| 肥东县| 车致| 收藏| 武定县| 呈贡县| 博罗县| 碌曲县| 安龙县| 望城县| 平原县| 郧西县| 平远县| 深水埗区| 巨鹿县| 青川县| 台中市| 平远县| 金川县| 休宁县| 天峻县| 德钦县| 临海市| 贵阳市| 定州市| 云霄县| 曲沃县| 漯河市| 桐梓县| 恩施市| 光泽县| 济南市| 南岸区| 遂昌县| 得荣县| 玉环县|