求解!C 裡定義變數後記憶體分配問題!

時間 2023-03-08 02:55:05

1樓:匿名使用者

樓主,首先要明確一件事。靜態記憶體是被放在棧中的。(你說的堆疊實際上就是棧區)

c++中,記憶體的分配方式分兩種,一種是靜態的,一種是動態的。這裡面你所分配的都是靜態記憶體,而靜態記憶體是儲存在棧區中的。棧區有乙個特點,其生長方向是向著位址減少的方向的。

也就是說,你每次靜態的分配乙個變數,其位址會比之前的變數小。這也就不難解釋,為什麼會有這樣的輸出。

樓主,如果你想要學好c++,記憶體管理一定要學好。這個問題在c++中非常的重要。

2樓:匿名使用者

c++中區域性變數,全域性變數,函式引數分配記憶體的順序:

區域性變數:在區域性變數分配空間的順序跟變數的宣告順序直接相關,同時按照記憶體由高到低的順序進行空間分配。 (當然 main函式的記憶體也被分配在棧上)

全域性變數:事實上,全域性變數不管有沒有被初始化,其實都是被存放在data這個域中的,但是唯一不同的是這個data資料域有的時候又被劃分成幾個小的區域(說有的時候是因為並不是所有的系統都一定會這樣做),分成initialized和un-initialized,因此,我們討論的全域性變數預設初始化或者初始化為零時,資料儲存在un-initilized區域中,被初始化為非零時,資料儲存在initialized區域中。

函式引數:程式中定義的函式中的區域性變數 和 main函式中 變數的分配順序一樣。

這分配原則 當然 和堆疊相關:

區域性常量一般在棧上分配記憶體空間;而new ,malloc,calloc,realloc 是在堆上或者自由儲存區的記憶體區域分配記憶體。

3樓:四念住

是這樣的。在main裡。其實就是乙個棧記憶體了,a,b,c都是棧裡的。

sub esp,0x[xx] 做完了後,add esp,0x[xx]

可以debug.進入彙編模式。就一清二楚了。

4樓:竹葉觀察

就是堆疊啊,而且window系統,定義的自動變數全從高位址像低位址生長的。

c語言定義結構體變數,C語言 定義結構體變數

樂跑小子 首先,定義一個結構的一般形式為 struct結構名 成員表由若干個成員組成,每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為 型別說明符 成員名 成員名的命名應符合識別符號的書寫規定。例如 struct stu 在這個結構定義中,結構名為stu,該結構由4個成員組成。...

c語言怎麼定義字串變數翱,c語言怎麼定義字串變數啊?

c沒有字串定義,字串是拆開放入char陣列裡面的 戚文柏 char buffer 使用指標最好.buffer char malloc 1024 strcpy buffer,1234567890 free buffer buffer null 小斬 字元陣列 求採納為滿意回答。 菜鳥學c加加 incl...

c語言中define巨集定義和變數定義的聯絡和區別

巨集定義是全域性性的,變數定義是區域性性的, 巨集定義主要在預處理階段完成,由前處理器進行字元替換,變數定義則會在記憶體中為變數分配地址。 吉檀迦利 define巨集定義的量是做常量處理的,如 define price 30,下文只要遇到price就代表常量30,他與變數的區別之一是在書出語句中pr...