陣列儲存在棧中還是堆中

2021-07-04 23:11:21 字數 379 閱讀 6375

今天看**,定義了乙個結構體

typedef struct ss_t;

//定義乙個指標

ss_t *stmp = null;

stmp = malloc(sizeof(ss_t));

我的第一反應是,怎麼可以定義這麼大資料,容易把棧搞死(理由:陣列儲存在棧空間)。

哎...忘了是由malloc產生的,根本就是生成在堆上。

但是這樣結構體定義變數時就會容易出現棧資源專用嚴重問題,如下:

ss_t tmp;

這樣乙個變數就占用了6k多棧資源,就不合理了。定義改為如下

typedef struct ss_t;

定義變數 ss_t  tmp;再使用malloc申請 buf 就更為合理。

C 中棧和堆的區別及區分物件儲存在堆或棧中的方法

剛開始學習c 記錄下點點滴滴,同時也分享下 棧 函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放,棧內分配運算內置於處理器的指令集中,效率高,但是分配的記憶體容量有限。堆 又稱為動態記憶體分配,程式在執行的時候用new申請任意多少的記憶體,由程式設計師自己負責在何時用...

記憶體中棧 堆

字串常量,放在哪個儲存區呢?是 自動儲存區 還是 靜態儲存區 中?比如 char pstr hello world 這裡,hello world 是乙個字串常量,pstr是在棧中的變數。我想問,字串常量,在哪個記憶體區域分配空間呢?好像應該不是在 棧區 分配空間吧!一 預備知識 程式的記憶體分配 乙...

程式中的棧 堆和靜態儲存區

一般來說,我們可以簡單的理解為記憶體分為三個部分 靜態區,棧,堆。很多書沒有把把堆和棧解釋清楚,導致初學者總是分不清楚。其實堆疊就是棧,而不是堆。堆的英文是heap 棧的英文是stack,也翻譯為堆疊。堆和棧都有自己的特性。程式中的棧 棧是現代電腦程式裡最重要的概念之一 棧在程式中用於維護函式呼叫的...