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

C語言數據類型長度速查表:16/32/64位編譯器差異全覆蓋

     編輯:關於C語言

基本類型大小(按編譯器位寬)

類型16位編譯器32位編譯器64位編譯器備註
char / signed char / unsigned char111標準保證 1 字節
char* (指標)248指標大小 = 地址總線寬度/8
short / unsigned short222至少 16 位
int / unsigned int244通常 = 寄存器寬度
long / unsigned long448Windows 64位仍為4(LP64 vs LLP64)
long long / unsigned long long888C99 引入,至少 64 位
float444IEEE 754 單精度
double888IEEE 754 雙精度
long double8/10/12/168/10/12/168/10/12/16實現相關,x86 常為 10 字節(80位)

關鍵差異點解析

  • 指標大小:唯一隨架構變化的標量類型,16/32/64 位分別為 2/4/8 字節。
  • long 的陷阱:Windows 64 位採用 LLP64 模型(long 4 字節),Linux/macOS 64 位採用 LP64(long 8 字節)。跨平台代碼禁用 long 做序列化/網絡傳輸,改用 int32_t/int64_t (stdint.h)。
  • 結構體對齊:實際佔用空間受 #pragma pack 或屬性 __attribute__((packed)) 影響,上表為單獨變量大小。

字符串長度計算

strlen(str) 返回不含結束符的字符數;分配緩衝區需 strlen(str) + 1。結構體中柔性數組成員(C99)需動態計算總大小。

實戰建議

  1. 使用 sizeof(type) 而非硬編碼數字。
  2. 跨平台項目引入 stdint.h,統一用 int32_t, uint64_t 等確寬類型。
  3. 網絡/文件協議定義結構體時,顯式指定 pack(1) 並手動處理字節序(htonl/ntohl)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved