讲师中心 微信公众号
AI工具推荐 视频效率加速

C++数据类型有哪些 C++基本数据类型内存占用一览表【基础】

胖涛君_7668

胖涛君_7668

发布时间:2026-01-30 08:47:02

|

823人浏览过

|

来源于php中文网

原创

C++中char、short、int、long、long long等类型大小不固定,仅规定最小位宽和相对大小关系,实际字节数依赖编译器和平台;char恒为1字节,其余类型需用定宽类型或sizeof/numeric_limits验证。

c++数据类型有哪些 c++基本数据类型内存占用一览表【基础】

char、short、int、long、long long 的实际大小不是固定的

C++ 标准只规定了这些类型的**最小位宽**和相对大小关系(比如 sizeof(long) >= sizeof(int)),不强制要求具体字节数。实际大小取决于编译器和目标平台。例如在 Windows x64 上用 MSVC,int 是 4 字节;但在某些嵌入式平台,int 可能是 2 字节。

常见误区是认为 int 一定是 4 字节——它只是「通常」是,但不可依赖。需要可移植代码时,优先用 <cstdint></cstdint> 中的定宽类型,比如 int32_t、uint8_t。

  • char 固定为 1 字节(sizeof(char) == 1 是 C++ 强制保证)
  • short ≥ 16 位,常见为 2 字节
  • int ≥ 16 位,主流平台多为 4 字节
  • long ≥ 32 位,Windows x64 是 4 字节,Linux x64 是 8 字节
  • long long ≥ 64 位,几乎所有现代平台都是 8 字节

float、double、long double 的精度与内存占用差异大

IEEE 754 是事实标准,但 long double 尤其危险:MSVC 完全忽略它(和 double 等价),GCC 在 x86 上用 80 位扩展精度(10 字节存储,但 sizeof(long double) 常为 12 或 16),而 ARM64 通常直接映射为 64 位 double。

如果你写数值计算,别假设 long double 更精确——先查编译器文档,或直接用 std::numeric_limits<long double>::digits10</long> 检查有效十进制位数。

立即学习“C++免费学习笔记(深入)”;

Ghostty — Your Always-On Digital Self
Ghostty — Your Always-On Digital Self

你的随时在线数字自我——并行监控所有通信渠道,学习你的写作风格,以你的语气起草回复并转发...

下载
  • float:通常 4 字节,约 6–7 位十进制精度
  • double:通常 8 字节,约 15–16 位
  • long double:3 字节起跳,行为高度平台相关,sizeof 不等于实际精度位宽

bool 和 void 不是“存储数据”的类型,但各有陷阱

bool 的 sizeof 不是 1 字节就安全——它只是“至少能存 true/false”,实际大小由 ABI 决定(常见为 1 字节,但某些调试模式或结构体对齐下可能被填充成 4 字节)。更关键的是:bool 只有两个合法值:true、false;用 memcpy 或位操作往 bool* 写非 0/1 值是未定义行为。

void 不能定义变量,但 void* 是万能指针类型;注意它不能算术运算(ptr + 1 非法),也不能解引用。C++17 起禁止 void 作为函数返回值以外的用途(如模板参数)。

  • 不要用 sizeof(bool) 推断内存布局,结构体中它的偏移受对齐规则支配
  • void* 转其他指针必须显式 static_cast,C 风格转换在 C++ 中不推荐
  • void 函数参数列表 () 表示无参数,不是“任意参数”(那是 ...)

如何在代码里查清当前平台的真实大小

别靠记忆或教程表格,直接运行 sizeof 和 std::numeric_limits。尤其当跨平台开发或对接 C API(比如 OpenGL、Win32)时,结构体字段大小错一位,整个二进制协议就崩。

最简验证方式:

#include <iostream>
#include <limits>
int main() {
    std::cout << "int: " << sizeof(int) << " bytes\n";
    std::cout << "double: " << sizeof(double) << " bytes\n";
    std::cout << "int max: " << std::numeric_limits<int>::max() << "\n";
}

记住:同一份源码,在 MSVC、Clang、GCC 下,甚至同一编译器不同架构目标(x86 vs aarch64)下,结果都可能不同。最保险的做法,是在构建脚本里加入 size check 断言,或者用 static_assert(sizeof(int) == 4, "int must be 4 bytes for our protocol")。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3351

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

574

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

562

2026.02.12

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

7327

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

864

2025.10.23

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

5214

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5391

2025.07.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

5214

2025.06.09

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn