国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言free函數的原理

2023-06-09 12:08:04
字體:
來源:轉載
供稿:網友

如果malloc 了一塊字符串的內存,然后,它改變了這個字符串的大小,問會不會有一部分內存沒有被釋放掉。當然,肯定會釋放掉的,但是一直沒有了解過free 的原理,不敢亂說。我看了一下操作系統的內存管理,基本上是這樣的,當然各個系統的實現不一樣。

操作系統管理內存,維護了一個空閑內存鏈表,malloc從個鏈表中選出一個來使用,每個內存塊都有一個頭部來表示這個內存的基本信息,如內存大小,所以free 時候 能夠記住原來指針所指的內存大小,而不是用內存塊中是否有 /0 來臨時計算指向內存的大小,不要字符串的計算長度的方法所誤導。

還有一點要注意的就是,系統在free 內存的時候,記住的只是malloc 時候的地址,和分配內存的大小。

比如 char *p = (char *)malloc(10); 就會產生分配10個字節。如果 你把指針的地址改變了 p = p + 1;  然后 free 就要出問題了。程序會崩潰。

如果一定要改變指針的值,建議這樣做 char *newp = p; 然后 改變 newp = newp + 1 , 最后 free(p);

還有一點要注意,一個長度 為10 的字符串要占用 11個字節。因為還有一個 '/0', 所以分配內存的時候要分配 lenght + 1 的大小。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泉州市| 长武县| 长治县| 长岛县| 莱阳市| 伊川县| 西乡县| 逊克县| 宜州市| 平阳县| 潜江市| 五峰| 祁东县| 永仁县| 疏附县| 平泉县| 平安县| 巴青县| 林州市| 通榆县| 南召县| 盐城市| 和政县| 惠安县| 巴南区| 稻城县| 金寨县| 紫金县| 隆昌县| 清徐县| 股票| 奉化市| 杭州市| 德庆县| 资中县| 丹东市| 青川县| 北流市| 克拉玛依市| 连云港市| 济南市|