C语言指针变量大小的问题
比如说sizeof(int*),在16位C程序中是2字节,32位4字节,64位8字节,这和CPU的寻址空间有关,但比如以16位为例,8086CPU的寻址是根据段地址*16...
比如说sizeof(int *),在16位C程序中是2字节,32位4字节,64位8字节,这和CPU的寻址空间有关,但比如以16位为例,8086 CPU的寻址是根据 段地址*16+偏移地址 来的,这样寻址空间就扩展到1M而不是64K,但C语言编译出的程序却只能使用64K的内存吗?
展开
展开全部
这段话好像是我之前写的.
那好吧,说说16位的指针.
十六位的寻址是段加偏移的方式来做的,段寄存器16位,偏移寄存器16位.
直接写 int * np;那么这是一个near指针,是十六位的
如果 int far *fp;那么这是一个far指针,是一个段寄存器16位和一个偏移16位,那么它的大小是4字节的.
另外,C编译器里还有一个 huge指针.也是32位的,但有效的好像只有20位.它的大小也是4字节的.
int huge *hp;
现在大家接触的多是32平的编译器,加上far 和huge这些关描述往往会报错,可以用TC2.0来试试.
那好吧,说说16位的指针.
十六位的寻址是段加偏移的方式来做的,段寄存器16位,偏移寄存器16位.
直接写 int * np;那么这是一个near指针,是十六位的
如果 int far *fp;那么这是一个far指针,是一个段寄存器16位和一个偏移16位,那么它的大小是4字节的.
另外,C编译器里还有一个 huge指针.也是32位的,但有效的好像只有20位.它的大小也是4字节的.
int huge *hp;
现在大家接触的多是32平的编译器,加上far 和huge这些关描述往往会报错,可以用TC2.0来试试.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
32位windows内存地址采用平坦结构,内存地址都是32位整数,而指针变量的实质就是内存地址。所以,不管哪一种类型的指针变量都是4个字节大小。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能表示地址的字段大小在16位机上占两个字节,因此,能表示出来的有效地址只能是:2^16=64K
如果能使用64K以上的地址,那这个地址该如何表示呢?
如果能使用64K以上的地址,那这个地址该如何表示呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以反汇编试试,好象会自动匹配.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询