wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2798回复:6

如何算一个包含指针变量的结构体的大小?

楼主#
更多 发布于:2004-09-29 15:44
固件程序中有这样一个结构体变量:
typedef struct _CODE_DATA
{
unsigned short wCodeAddress;
unsigned short wCodeLength;
unsigned short wCodeCount;
unsigned char* pCodeData;
} CODE_DATA, *PCODE_DATA;
程序中这个结构体变量占用9个字节的空间,不知道是如何算的?前3个应该各占用2个字节,第四个指针变量咋会占用3字节呢?向各位大侠请教啦.....
多多交流,少走弯路!!!
cahwlx1982
驱动小牛
驱动小牛
  • 注册日期2004-08-16
  • 最后登录2006-06-17
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-30 17:27
楼主:
我不知道你用的什么样的编译器,要是是通常的C语言的话!!
short 是三个字节!就是short long的意思!那么前面三个就有6个字节了!!至于第四个的话,那要看指针的字宽度,如果是一个32位的指针,那就是4个字节,而与前面的char,不是说他是一个单字节数!!因为指针是一个代表地址的变量!!
所以如果你用的编译器的C和通常的是一样的话,那就不是9个字节了!!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-30 19:29
不好意思,我忘了说啦。我用的是Keil C51编译器,我用sizeof(CODE_DATA)语句来仿真的时候发现这个语句的值就是9,那个指针变量怎么会是3个字节呢?
多多交流,少走弯路!!!
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-01 23:22
Keil里面的指针包含两部分,两个字节的指针值(可以访问64k),另一个字节存放bank值和指针类型(idata, pdata, xdata cdata等)
所以会有三个字节,这是该语言所特有的。
A strong man can save himself. A great man can save another.
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-02 08:12
谢谢zmwk大侠!
zmwk大侠,你说指针占用3个字节是Keil语言所特有的,那么在别的语言中指针变量占用的空间是如何算的呢?譬如,在VC中unsigned char* pCodeData语句定义的pCodeData变量会占用几个字节呢?
请教啦......

[编辑 -  10/2/04 by  wanggang508]
多多交流,少走弯路!!!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-09 18:00
期待中.......



多多交流,少走弯路!!!
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-11 10:08
谢谢zmwk大侠!
zmwk大侠,你说指针占用3个字节是Keil语言所特有的,那么在别的语言中指针变量占用的空间是如何算的呢?譬如,在VC中unsigned char* pCodeData语句定义的pCodeData变量会占用几个字节呢?
请教啦......

[编辑 -  10/2/04 by  wanggang508]


当前的VC(V6, V7)是32位编译器,基于Windows平台,CPU架构为冯.诺伊曼结构,即指令和代码在同一空间。由于Windows平台支持4G内存空间,所以它的指针都是32位,即4字节长的。由于它是32位编译器,它的BOOL,INT也是四个字节长,而一般的16位编译器是2字节。

指针的长度主要取决于需要支持的地址空间长度,两个字节只能支持64K,很多嵌入式系统都不够啊。


听说,微软在做64位的编译器了...
A strong man can save himself. A great man can save another.
游客

返回顶部