學java時了解到不同的數據在系統中存儲的位置不一樣,有的存在棧里,有的存在堆里。學C/C++時沒注意過這個,最近學數據結構時遇到了問題:在定義一個結構體的指針時,系統如何給它分配的空間?從而讓我想去了解C/C++中數據是如何存儲的。同時在學遞歸時就一直聽到系統棧這個詞,這次可以一並學習。
在CSDN中了解到C語言程序運行時內存的分類方式,有四大類或五大類兩種。在其中我要關注的是堆區和棧區。堆區用於臨時申請,棧區用於函數中的臨時變量的存儲。一般來說堆區無限大,棧區有一定大小。
在定義一個結構體的指針時,系統如何給它分配的空間?這個我沒看到,不過經過我在dev中的代碼測試,定義的結構體指針分配了8個字節,和結構體的實際大小不同,這個指針仍然存儲的是地址。經測試,指針定義時系統初始化讓指針指向NULL,這時就不能令p->data為某值,而需先令指針指向某塊分配了結構體空間的區域。