首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

為什麼 32 位系統下 C 語言指標大小固定為 4 字節?

     編輯:C 語言問答

核心原因:位址總線寬度決定指標大小

指標本質是 記憶體位址的容器。在 32 位架構 (IA-32, ARMv7 等) 上:

  • CPU 位址總線寬度 = 32 位 = 4 字節。
  • 虛擬位址空間 = 2^32 位元組 = 4 GiB。
  • 任何資料類型的位址都能用一個 32 位無符號整數表示。
  • 因此 `char*`、`int*`、`double*`、`void*`、`函式指標` 統統佔用 4 字節。

64 位系統的變化

架構位址總線指標大小虛擬位址空間常見資料模型
x86-64 (LP64)48 位 (擴展至 52/57 位)8 字節256 TiB / 4 PiB / 128 PiBLinux/macOS/BSD: long=8, pointer=8
Windows x64 (LLP64)48 位8 字節256 TiBlong=4, long long=8, pointer=8
ILP32 (32 位)32 位4 字節4 GiBint=long=pointer=4

特殊情況:近/遠指標 (16 位實模式遺產)

在 16 位 DOS/8086 時代,記憶體分段導致:near pointer (2 字節,段內偏移)、far pointer (4 字節,段:偏移)、huge pointer (4 字節,正規化遠指標)。現代平坦記憶體模型已淘汰此概念。

驗證程式碼

#include <stdio.h>
int main() {
    printf("char*     : %zu\n", sizeof(char*));
    printf("int*      : %zu\n", sizeof(int*));
    printf("double*   : %zu\n", sizeof(double*));
    printf("void*     : %zu\n", sizeof(void*));
    printf("int(*)()  : %zu\n", sizeof(int(*)()));
    return 0;
}
// 32 位輸出全為 4;64 位輸出全為 8
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved