學習小結

經過前面一段時間的學習,學習到了 一系列的str :  strlen,strcat,strcmp,strcpy,strstr.學習到這裏的時候 感覺 程序語言其實也是挺有趣的。

前天學習到內存分配的時候

{

棧:局部變量,形式參數。

堆:動態內存。

靜態區:靜態變量和全局變量。

}

學習到了一個新的知識:動態內存。

而爲什麼要提到動態內存,因爲在我們進行 編譯的時候,一個數組的長度只有在運行的時候才能夠知道,但是不同的情況下 需求的空間大小也不一樣,一般都是申請一個能夠容納最多元素的數組,這樣存在一定的空間浪費,並且靈活性不夠。

爲了使數組 永遠不會溢出,動態內存很好的解決了這個問題。給定一個初始大小,然後再需要的空間增加的 實現增容。就像我們使用的通訊錄一樣,給定一個不大的內存空間存放有限小的人數,當需要存儲的人數變多,也實現動態的增加,不會造成空間的浪費,也不會因爲達到上限而煩惱。


malloc:執行動態內存分配。

free:內存的釋放。

在我看來,free 這個函數是動態內存部分最關鍵的 一環,在申請空間並使用之後返還內存,如果不進行free這項操作的話,會導致程序運行時一直佔用系統內存,最終導致系統崩潰,所以說free 這個函數是在進行malloc之後必須進行的一項操作。

而malloc則就是分配合適的內存塊,提供其指針,但是不會對內存塊進行初始化,一切的初始化需要自己手動進行。

因爲malloc不進行初始化,所以有了calloc這個函數。

calloc在返回指向內存塊的指針之後 就對其進行了初始化,相當於 malloc和memoset的集合。方便了使用者的操作,但是當你只是相對數值進行存儲的話,calloc就比malloc更加浪費時間了。

還有一個realloc函數,其主要作用就是在需要增容時直接在後面添加一個空間,而當後面的空間不夠是開闢一塊足夠大小的空間,將之前空間的內容拷貝過來,並將之前的空間進行釋放。

動態空間的使用必須是嚴謹的,需要注意一下幾點:

1.對空指針進行解引用。

2.對動態內存的越界。

3.釋放非動態內存。

4.釋放動態內存的一部分。

5.再次訪問已經釋放的內存空間。

6.對同一塊動態內存的多次釋放。


加油。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章