You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位架构下C语言所有指针均为8字节吗?不同指针大小疑问

指针类型大小的一致性问题解答

你测试的代码如下:

void fx(void) {}

int main() {
    printf("%lu\n", sizeof(int*));
    printf("%lu\n", sizeof(int**));
    printf("%lu\n", sizeof(int****));
    printf("%lu\n", sizeof(float*));
    printf("%lu\n", sizeof(double*));
    printf("%lu\n", sizeof(void*));
    printf("%lu\n", sizeof(char*));
    void(*p)(void);
    printf("%lu\n", sizeof(p));    
}

针对你提出的问题,解答如下:

  1. 在64位(8字节)或32位(4字节)的主流通用平台(比如x86、x86_64架构)上,所有不同类型的指针大小都是一致的。但要注意,C语言标准并没有强制要求所有指针类型必须有相同的大小,这只是常见平台的实现惯例。

  2. 若出现不同类型指针大小不一致的情况,通常是以下原因:

  • 特殊内存架构:比如16位x86系统的分段内存模型中,存在近指针(16位,仅指向当前段内地址)和远指针(32位,包含段选择子和偏移量),二者大小不同;
  • 嵌入式/专用处理器优化:部分嵌入式平台或DSP为了节省内存空间,会针对不同数据类型使用不同宽度的指针,比如针对小型数据区域的窄指针;
  • 地址空间分离:个别处理器的代码空间和数据空间是物理分离的,函数指针和数据指针需要访问不同的地址空间,因此设计成不同的大小。

内容的提问来源于stack exchange,提问作者alessio solari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:22:12