内存分配?

金笛子 2008-02-22 02:49:51
int dog, cat, bird, fish;

void f(int pet)
{
cout << "pet id number" << pet << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{

cout << "f(): " << (long)&f << endl;
cout << "dog: " << (long)&dog << endl;
cout << "cat: " << (long)&cat << endl;
cout << "bird: " << (long)&bird << endl;
cout << "fish: " << (long)&fish << endl;

int i;
int j;
int k;
cout << "i: " << (long)&i << endl;
cout << "j: " << (long)&j << endl;
cout << "k: " << (long)&k << endl;

return 0;

}

以上程序
在vc6 输出为:

在vc2005输出为

为什么VC6间隔是4 而2005 好像为12 又好像没有规律哦。

哪位能够解释下吗?
...全文
171 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Supper_Jerry 2008-03-04
  • 打赏
  • 举报
回复
看一下深入c++对象模型吧
天亮后说晚安 2008-03-04
  • 打赏
  • 举报
回复
飘过
北极猩猩 2008-02-23
  • 打赏
  • 举报
回复
估计楼主使用的是debug版的程序,VS2003之后再debug版中会插入一些flag数据,以检测非法内存覆盖。

另外,这种东西都是由编译器决定的,不用特别深究(除非你打算hack这个程序)
knift1128 2008-02-22
  • 打赏
  • 举报
回复
编译器的内存布局不一定一样~~~~
cangwu_lee 2008-02-22
  • 打赏
  • 举报
回复
間隔多少,真沒意義。差別多少,才會有意義
金笛子 2008-02-22
  • 打赏
  • 举报
回复
我这里只是想 去了解内存分配 及其结构。
金笛子 2008-02-22
  • 打赏
  • 举报
回复
C++编程思想 第61页说明:如果间隔是4的话 说明在这台机器上 一个int占4个字节

而这里很奇怪 为什么在2005上面却不是这样的结果而vc6上面却是。

上面有全局变量,局部变量,函数,至少从分配地址来看

有连续分配的 又不连续的

而嵌入式开发 对这方面要求比较高

所以 我想弄明白这个是为什么?

不知道是否vs2005 考虑到双核什么的。

期待中。。。
  • 打赏
  • 举报
回复
没有规定变量的顺序,中间填充什么也没规定
所以输出什么都合理
hslinux 2008-02-22
  • 打赏
  • 举报
回复
要有规则的输出,最好自己做格式化输出
ltc_mouse 2008-02-22
  • 打赏
  • 举报
回复
编译器做了些处理的吧~

严重同意甘草,这些间隔没啥太大意义...
healer_kx 2008-02-22
  • 打赏
  • 举报
回复
晕,你管那些间隔干什么呢。。。

64,684

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧