国产探花免费观看_亚洲丰满少妇自慰呻吟_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 的大小。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 象山县| 民县| 凤城市| 米泉市| 黑山县| 儋州市| 林口县| 益阳市| 泽普县| 和林格尔县| 台东县| 沭阳县| 阳信县| 富锦市| 商都县| 保德县| 麻城市| 丰台区| 秦皇岛市| 宜良县| 凉城县| 林口县| 友谊县| 包头市| 兰溪市| 永吉县| 永嘉县| 临湘市| 汝城县| 宝应县| 吕梁市| 东方市| 邢台县| 临桂县| 瑞安市| 惠水县| 会理县| 崇州市| 冕宁县| 吉安市| 邵武市|