作者OnlyCourage (An)
看板C_and_CPP
标题[问题] 宣告的记忆体空间和位址
时间Sat Jul 20 13:51:43 2019
各位好!
小弟想了解宣告是记忆体的配置方式,遇到一些问题。
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1563601905.A.A8D.html
1F:推 school4303: 因为这样宣告是在stack里 记忆体是从大的往小的要07/20 14:07
2F:推 KaryuuIssen: 你看反了 a3是0x62fe40~48 a1是0x62fe3c~4007/20 14:07
3F:→ school4303: a3是40-4707/20 14:07
4F:→ KaryuuIssen: 恩 不包含结尾07/20 14:09
5F:→ nh60211as: 你自己先画出来看吧,你都说int是4bytes07/20 14:11
我知道区域变数是存stack里面,但有点搞不清楚实际操作的储存方式。
所以我一开始的观念是第一张图
https://i.imgur.com/jIzBkvZ.jpg
但是实际操作的时候正确的观念应该是第二张图对吧?
https://i.imgur.com/u7whltJ.jpg
如果还有错,请各位指教!
谢谢
※ 编辑: OnlyCourage (49.218.65.223 台湾), 07/20/2019 14:51:09
6F:→ school4303: 对 是图二没错 只是你a2a5的位址标错07/20 17:04
喔对!我打错了,应该是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
8F:→ nh60211as: 你试试这个程式码,应该要看记忆体实际的内容 07/20 19:43
9F:→ nh60211as: 不要猜他的记忆体位置塞了什麽东西 07/20 19:43
10F:→ nh60211as: 最好的方法应该是找个可以看记忆体的debugger 07/20 19:47
11F:嘘 loveme00835: 宣告不占记忆体 07/20 19:49
13F:推 KaryuuIssen: 对齐问题 0x62fe40才能被8整除 07/22 17:03