楼主:
o5739201 (车贷学贷付二贷)
2018-12-12 17:02:13https://i.imgur.com/s2nI9eU.jpg
怎么想都感觉怪怪的 为什么会是用减的 ?
是因为用malloc配置的空间是stack吗?
作者:
eggy1018 (羅密æ與豬éŽå¤œ)
2018-12-12 18:08:00Malloc Pointer放在Stack , pointer 指向的data 放在heap如果有错还请大大指教
地址由上往下递增,stack往下长,heap往上长,这样你就懂了,倒是为什么 64-bit CPU 的整数是 8 bytes这我还不懂,我以为整数最长就只到 32 bits。
作者:
eggy1018 (羅密æ與豬éŽå¤œ)
2018-12-12 22:25:0064bit=8byte 因为byte address, 所以是+-8
我刚刚在WSL上印sizeof(int)明明是4,到底为什么是8是64bit的电脑喔大家要不要把自己sizeof(int)的结果截图PO上来参考
int在32 64下都是4byte啊但是在64下地址所占空间是8byte,跟int所占空间根本无关这题应该只是考stack生长方向和 64bit下地址所占空间而已
楼主:
o5739201 (车贷学贷付二贷)
2018-12-12 23:53:00谢谢各位大大 懂了
作者:
eggy1018 (羅密æ與豬éŽå¤œ)
2018-12-13 00:58:00这题真是太好玩了,那蛋大对+8还是-8有理论解释吗?
作者:
eggy1018 (羅密æ與豬éŽå¤œ)
2018-12-13 01:45:00抱歉我的+-8的意思只是移动8没特别的意思,造成误会的话很对不起
作者:
DLHZ ( )
2018-12-13 02:00:00几byte不是看compiler?
sizeof(int)是4byte sizeof(size_t)才会跑出8所以pointer type应该是size_t才是
是说64bits下存一个int变量花8byte里面却只有4byte的资料,是这样吗
DLHZ: 看平台定义常数Dora: 被误导了,这题问的是指标大小,非普通变量大小,请看清楚,所以我才说这题鉴别度低
楼主:
o5739201 (车贷学贷付二贷)
2018-12-13 10:12:00所以是用加的吗?stack往下长 下面不是位置比较低吗?我用dev-c去试 是用减的没错Compiler 是 TDM-GCC 4.9.2 64bit
这个问题就是 如果是4 byte 要怎么表示 64 bit addr
stack是往下长,但local变量摆放顺序C语言规格书没有强制规定,很多compiler会为了安全考量,更改变量摆放位置
喔,还有可能因为空间利用上的关系改变变量顺序然后stack地址越往下越小,这os应该有教吧
可恶,刚查了还真的是愈下面愈小,感谢楼上,受教了这样的话如果按照默认行为的话答案应该就没错了
作者:
eggy1018 (羅密æ與豬éŽå¤œ)
2018-12-13 14:30:00感谢b大a大的讨论 小弟受教了
楼主:
o5739201 (车贷学贷付二贷)
2018-12-13 17:12:00答案就只有写这样哦 已经是全部了
作者: jjuussttiinn (鲁鲁丑丑宅) 2018-12-13 18:50:00
作者: ss850423tw 2018-12-14 23:33:00
题目是不是只是问 printf(“%x\n”,&p)这行的address和下一行的address的关系,并不是问p q指标的位置关系啊喔喔抱歉 没看清楚是说那行的 output所以应该是指标存heap然后heap往上长所以是+8没错吧
&p &q都是stack地址,跟heap无关,如果要看heap地址应该要看p q
作者: ss850423tw 2018-12-15 11:56:00
喔呜了解了谢谢b大
回复alan大大 妳的位址第一个是f所以是负数所以这题是减没有错喔
kobe大大按照你说的,那答案位址b开头代表sign bit=1,那也是负的,这样选项就错了对ㄅ包括蛋大的截图也是,e开头也是负的,可是他却是减
到底在说什么 Memory Address 什么时候有负的这种