| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 726 人关注过本帖
标题:对VC编译器空间分配的一点疑惑
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
 问题点数:0 回复次数:2 
对VC编译器空间分配的一点疑惑
#include "stdio.h"

int main()
{
 short array1[0x100];
 short array2[0x100];

 printf("The actual spaces of iarray1 is %x (array1-array2)\n",array1-array2);
    printf("The declare spaces of iarray1 is %x (sizeof(array1))\n",sizeof(array1));
 return 0;
}

在VC6平台下,上面运行的显示结果是

The actual spaces of iarray1 is 100 (array1-array2)

The declare spaces of iarray1 is 200 (sizeof(array1))

而在VS2005平台下,上面运行的显示结果是  

The actual spaces of iarray1 is 104 (array1-array2)

The declare spaces of iarray1 is 200 (sizeof(array1))

也就是不管在 VC6平台下,还是在VS2005平台下,对于short array1[0x100];分配的实际空间大小(array1-array2)和期望的大小(sizeof(array1) 是不一致的,不知道这个算不算一个BUG ??还是C标准中本来就该这样解释

我本来感觉 (array1-array2)和 (sizeof(array1))这两个值应该是相等的!

int.JPG (35.89 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 编译平台 空间分配 
2008-11-14 16:41
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 2# 的帖子
局部变量放在堆栈中
他们的地址是连续的
因此相减得到的是前一个变量占据堆栈的空间大小

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-11-14 19:49
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
有人说标准C中对局部变量的地址没有做任何规定
只是要求他们放在堆栈中就可以了

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-11-14 23:33
快速回复:对VC编译器空间分配的一点疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023017 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved