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的内存吗? 展开
 我来答
悟天籁23
2016-06-07 · 超过14用户采纳过TA的回答
知道答主
回答量:32
采纳率:100%
帮助的人:26.2万
展开全部
对于这个你只要记住一句秘诀就好,指针的大小仅仅取决指针本身的大小,不取决于指针指向的大小。 还有就是还有一个虚拟内存和物理地址的关系,有MMU映射,8086里有硬件完成一个地址偏移的过程,物理地址 = 基址*16 + 变址。
lyqf365
2012-09-04 · TA获得超过1185个赞
知道小有建树答主
回答量:1291
采纳率:100%
帮助的人:768万
展开全部
这段话好像是我之前写的.
那好吧,说说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来试试.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淦秀荣义雁
2019-07-09 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:2051万
展开全部
32位windows内存地址采用平坦结构,内存地址都是32位整数,而指针变量的实质就是内存地址。所以,不管哪一种类型的指针变量都是4个字节大小。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2012-09-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6128万
展开全部
能表示地址的字段大小在16位机上占两个字节,因此,能表示出来的有效地址只能是:2^16=64K
如果能使用64K以上的地址,那这个地址该如何表示呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangfan2000
2012-09-04 · TA获得超过2549个赞
知道小有建树答主
回答量:586
采纳率:50%
帮助的人:560万
展开全部
你可以反汇编试试,好象会自动匹配.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式