阅读:2799回复:6
如何算一个包含指针变量的结构体的大小?
固件程序中有这样一个结构体变量:
typedef struct _CODE_DATA { unsigned short wCodeAddress; unsigned short wCodeLength; unsigned short wCodeCount; unsigned char* pCodeData; } CODE_DATA, *PCODE_DATA; 程序中这个结构体变量占用9个字节的空间,不知道是如何算的?前3个应该各占用2个字节,第四个指针变量咋会占用3字节呢?向各位大侠请教啦..... |
|
|
沙发#
发布于:2004-10-11 10:08
谢谢zmwk大侠! 当前的VC(V6, V7)是32位编译器,基于Windows平台,CPU架构为冯.诺伊曼结构,即指令和代码在同一空间。由于Windows平台支持4G内存空间,所以它的指针都是32位,即4字节长的。由于它是32位编译器,它的BOOL,INT也是四个字节长,而一般的16位编译器是2字节。 指针的长度主要取决于需要支持的地址空间长度,两个字节只能支持64K,很多嵌入式系统都不够啊。 听说,微软在做64位的编译器了... |
|
|
板凳#
发布于:2004-10-09 18:00
期待中.......
|
|
|
地板#
发布于:2004-10-02 08:12
谢谢zmwk大侠!
zmwk大侠,你说指针占用3个字节是Keil语言所特有的,那么在别的语言中指针变量占用的空间是如何算的呢?譬如,在VC中unsigned char* pCodeData语句定义的pCodeData变量会占用几个字节呢? 请教啦...... [编辑 - 10/2/04 by wanggang508] |
|
|
地下室#
发布于:2004-10-01 23:22
Keil里面的指针包含两部分,两个字节的指针值(可以访问64k),另一个字节存放bank值和指针类型(idata, pdata, xdata cdata等)
所以会有三个字节,这是该语言所特有的。 |
|
|
5楼#
发布于:2004-09-30 19:29
不好意思,我忘了说啦。我用的是Keil C51编译器,我用sizeof(CODE_DATA)语句来仿真的时候发现这个语句的值就是9,那个指针变量怎么会是3个字节呢?
|
|
|
6楼#
发布于:2004-09-30 17:27
楼主:
我不知道你用的什么样的编译器,要是是通常的C语言的话!! short 是三个字节!就是short long的意思!那么前面三个就有6个字节了!!至于第四个的话,那要看指针的字宽度,如果是一个32位的指针,那就是4个字节,而与前面的char,不是说他是一个单字节数!!因为指针是一个代表地址的变量!! 所以如果你用的编译器的C和通常的是一样的话,那就不是9个字节了!! |
|