作者jerrypotato (我是汤姆猫 不是杰利薯)
看板C_and_CPP
标题[问题] 要抓出存放Array Size的记忆体位置
时间Mon Oct 5 21:24:00 2009
现在课堂上正在复习C++语法
顺便介绍变数宣告时 电脑是如何实际的指派记忆体位置给那些被宣告的变数
其中有一题是这样的:(只列出关键部份)
class A
{
int data;
}
int main()
{
A *arr = new A[17];
//Some Commands......
return 0;
}
根据教授的说法,"17"这一个数字会实际存在於记忆体中,
而且其位置位於arr之前的几个byte,
要我们定位出"17"这个数字,所占据的记忆体位址。
我试过好几个方法,可是最後都是失败的,
最後还用到超级暴力法:
int *intptr = (int *) &arr //强制取出arr的记忆体位址
for (int k = 0; k < 50; k++ )
cout << *(intptr - k) << endl //把arr位址之前的记忆体全部扫瞄过一遍
结果还是不能扫到17这个数字 囧
实在没办法,只好PO上版来请教各位强者,
请问我要如何定位出"17"这个数字所占据的记忆体位址呢?
谢谢<(_ _)>
--
BED ▎●▅ ▅
▎●▁▁
▎●▅▅▅
▎●▅▅
┌ ▎ ┐
▇▇▇ ▇ ▇▇▇▇ ▇▇▇▇ ●▅▅
▇▇▇▇ │ ▇▇▇▇ │
&
▎ ▎ ▎ ▎ ▎ ▎ ▎●▅▅
│ ▎ ▎│
▇▇▇▇ │ │
I magician super model basketball homeless prisoner
└ engineer
┘
player
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.243.205
1F:→ VictorTom:dynamic alloc回来的空间, 其大小不会直接放在该空间前 10/05 21:31
2F:→ VictorTom:後才对吧?? 这个资讯要也是放在heap管理相关的code里, 10/05 21:32
3F:→ VictorTom:我想你应该先确认教授的问题, 我猜他想问的应该是code 10/05 21:33
4F:→ VictorTom:(翻好的)哪里会让你看到17. 如果是VC, 你可以disasm出来 10/05 21:33
5F:→ VictorTom:看, 组语码找到new那行前後, 应该就会有地方算出来这个 10/05 21:34
6F:→ VictorTom:17怎麽换算与传给OS让它帮你配记忆体的. 10/05 21:34
7F:→ VictorTom:至於是local的, global的, static的, 又都是另一段故事 10/05 21:36
8F:→ VictorTom:了....XD 10/05 21:36
9F:推 VictorTom:话说, 他说的到底是arr这个pointer本身位址的前面还是 10/05 21:40
10F:→ VictorTom:arr指到的位址的前面啊?? 反正前者应该是错的XD 10/05 21:40
11F:→ VictorTom:而你的code看起来就是用上一行说的错的那种在找Orz 10/05 21:41
他的原文是 The array size "17" is recorded around "arr's" location in the heap
memory. (hint: some bytes before arr's address). please locate this piece of
memory and verify that the number in that memory is indeed "17".
因此我就把上面那段话想成要找出"17"的所在位置了 囧
※ 编辑: jerrypotato 来自: 140.112.243.205 (10/05 21:51)
12F:推 ADF:建议你trace delete[] 看compiler是怎麽实作的 10/05 22:06
13F:推 joefaq:我觉得那个"17"就跟一般的const变数放一起 10/05 22:11
14F:→ ilway25:资结!?xd 10/06 16:33