[問題] 宣告的記憶體空間和位址
各位好!
小弟想了解宣告是記憶體的配置方式,遇到一些問題。
double a4, a3;
int a1, a2, a5;
分別print這五個變數的記憶體位址如下
a1>0x62fe3c
a2>0x62fe38
a3>0x62fe40
a4>0x62fe48
a5>0x62fe34
編譯的時候會先a4, a3, a1, a2, a5依序建立,double為8bytes,int為4bytes。
我的問題是a4到a3佔了8bytes,但是a3為double型態,為什麼到a1卻只有4bytes呢?不是應
該8bytes,而a1從0x62fe38開始嗎?
謝謝各位指教!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.218.65.223 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1563601905.A.A8D.html
推
07/20 14:07,
4年前
, 1F
07/20 14:07, 1F
推
07/20 14:07,
4年前
, 2F
07/20 14:07, 2F
→
07/20 14:07,
4年前
, 3F
07/20 14:07, 3F
→
07/20 14:09,
4年前
, 4F
07/20 14:09, 4F
→
07/20 14:11,
4年前
, 5F
07/20 14:11, 5F
我知道區域變數是存stack裡面,但有點搞不清楚實際操作的儲存方式。
所以我一開始的觀念是第一張圖
https://i.imgur.com/jIzBkvZ.jpg
但是實際操作的時候正確的觀念應該是第二張圖對吧?
https://i.imgur.com/u7whltJ.jpg
如果還有錯,請各位指教!
謝謝
※ 編輯: OnlyCourage (49.218.65.223 臺灣), 07/20/2019 14:51:09
→
07/20 17:04,
4年前
, 6F
07/20 17:04, 6F
喔對!我打錯了,應該是0x62fe38, 0x62fe34!感謝!
不過我有遇到另一個問題了!
double a1;
int a2;
print出來是
a1>0x62fe48
a2>0x62fe44
這邊沒有問題,但是反過來宣告就怪了
int a1;
double a2;
print出來是
a1>0x62fe4c
a2>0x62fe40
變成a2原本佔得記憶體為8bytes,卻變成12bytes,理論上a2應該要是0x62fe44不是嗎?
謝謝各位
※ 編輯: OnlyCourage (49.218.65.223 臺灣), 07/20/2019 18:09:20
→
07/20 19:42,
4年前
, 7F
07/20 19:42, 7F
→
07/20 19:43,
4年前
, 8F
07/20 19:43, 8F
→
07/20 19:43,
4年前
, 9F
07/20 19:43, 9F
→
07/20 19:47,
4年前
, 10F
07/20 19:47, 10F
噓
07/20 19:49,
4年前
, 11F
07/20 19:49, 11F
→
07/20 20:02,
4年前
, 12F
07/20 20:02, 12F
推
07/22 17:03,
4年前
, 13F
07/22 17:03, 13F