• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-12-01 13:38 Aet 隐藏边栏 |   抢沙发  1 
文章评分 1 次,平均分 5.0

cpp

数据模型和数据类型大小

  1. C++ 数据类型的大小并不是完全固定的,而是由数据模型(Data Model)决定的
    1. 不同的操作系统和编译器组合会采用不同的数据模型

为什么有不同数据模型

  1. Windows 选择 LLP64 是为了最大化 32 位代码兼容性
    1. 保持 long4 字节避免破坏大量现有代码
  2. Unix 系统历史上 long 就用于"机器字长"
    1. 64 位时自然扩展到 8 字节

数据类型大小规则

  1. C++ 标准只规定了最小大小,而不是精确大小

  1. 实际实现约束

数据模型对比1

  1. Windows
    1. Windows 采用 LLP64 模型:Long Long and Pointer are 64-bit
类型 32Windows 64Windows 说明
char 1 1 固定
short 2 2 固定
int 4 4 不变
long 4 4 不变(重要!)
long long 8 8 固定
float 4 4 固定
double 8 8 固定
long double 8 8 可能更大
void* 4 8 变化
size_t 4 8 变化
  1. unixlinux
    1. Linux/Unix 采用 LP64 模型:Long and Pointer are 64-bit
类型 32Linux 64Linux 说明
char 1 1 固定
short 2 2 固定
int 4 4 不变
long 4 8 变化(关键差异!)
long long 8 8 固定
float 4 4 固定
double 8 8 固定
long double 12/16 16 可能更大
void* 4 8 变化
size_t 4 8 变化

数据模型对比2

  1. ILP3232位系统标准模型)
    1. Int, Long, Pointer 都是 32
    2. 32Windows32Linux32macOS
类型 字节数
int 4
long 4
pointer 4
  1. LP6464Unix 标准模型)
    1. Long, Pointer64 位,Int 保持 32
    2. 64Linux64macOS、大部分 Unix 系统
类型 字节数
int 4
long 8
pointer 8
  1. LLP6464Windows 模型)
    1. Long Long, Pointer64 位,Long 保持 32
    2. 64Windows
类型 字节数
int 4
long 4
long long 8
pointer 8

数据模型总结

  1. 32位系统(包括 Windows、Linux、macOS、Unix)用的都是 ILP32 数据模型
  2. 64Linux64macOS、大部分64Unix 系统,用的都是 LP64 数据模型
  3. 64Windows 用的是 LLP64 数据模型

LPLLP对比

  1. lp
    1. long 648字节
    2. long double 3212/16字节,6416字节
  2. llp
    1. long 644字节
    2. long double 328字节,648字节

数据类型大小总结

  1. 32ilp
    1. int,long,ptr 都是4字节
    2. long long 8字节
    3. windowslong double 8字节
      linuxlong double 12字节
  2. 64lp
    1. int,long,ptr4,8,8字节
    2. long long 8字节
    3. long double 16字节
  3. 64llp
    1. int,long,ptr4,4,8字节
    2. long long 8字节
    3. long double 8字节

数据类型跨平台推荐

  1. 使用固定宽度类型

windows

LPARAMWPARAM

  1. 概述
    1. LPARAMWPARAMWindows 消息机制中的两个核心参数类型,用于在发送和处理窗口消息时传递附加信息
  2. 定义

  1. 关于使用
    1. 这两个参数的具体含义完全取决于消息类型
    2. Windows 为不同的消息定义了不同的参数解释方式
  2. 用法1:简单传递数值

  1. 用法2:坐标信息

  1. 用法3:传递指针

  1. 用法4:打包多个值

相关宏

  1. 位操作

  1. 类型转换

具体消息示例

WM_KEYDOWN / WM_KEYUP

WM_HSCROLL / WM_VSCROLL

WM_NOTIFY

自定义消息

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享