[关闭]
@yiltoncent 2015-11-11T17:49:02.000000Z 字数 613 阅读 3416

C语言指针的长度(不同平台下的区别)

C语言基础


今天在公司和同时讨论一个结构体,结构体中有一个指针,我们对于指针的长度有了意见。
这是一个CC2530的芯片,它的内核是8051,所以我猜测它的指针长度应该是16位的,而同事猜测是32位的。仅仅争执也没有编程试一下。

C语言指针的长度和类型深入分析

在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样。但是函数指针长度可能与数据指针的长度不同。指针的长度取决于使用的机器类型和编译器

我们这里只讨论普通数据指针。大部分现代平台下C语言指针的长度都是32位,目前64位机器搭配64位操作系统的指针长度为64位。

在嵌入式平台上,情况也比较复杂。有8位、16位、32位。据我所知,大部分16位、32位机器的指针长度是32位,因为很多16位机器的地址总线是32位,自然的指针也可以到32位。

比较特殊的是8位平台如8051,它的地址总线是16位。指针如果是32位,高16位完全没有意义,编译器如果对指针的空间分配是按32位来的,那么首先是空间浪费,然后是高16位无意义。因此我鉴定的认为像8051这样的平台,指针的长度应该是16位的。

说到底还是没有测试,指针长度取决于具体的C编译器实现。大家使用的时候如果有疑问应该参考编译器手册。

【后记】
最后没忍住,还是试了一下,在IAR 中, 指针长度是16位的。也验证了我的猜测。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注