标题:对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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-244232-1-1.html




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

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