0

0

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

穿越時空

穿越時空

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

|

723人浏览过

|

来源于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 字节——它只是「通常」是,但不可依赖。需要可移植代码时,优先用 中的定宽类型,比如 int32_tuint8_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::digits10 检查有效十进制位数。

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

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

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

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

魔法映像企业网站管理系统
魔法映像企业网站管理系统

技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作

下载

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

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

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

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

最简验证方式:

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

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

309

2023.10.31

php数据类型
php数据类型

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

222

2025.10.31

css中float用法
css中float用法

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

580

2024.04.28

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

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

102

2025.10.23

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

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

240

2025.06.09

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

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

192

2025.07.04

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

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

240

2025.06.09

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

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

192

2025.07.04

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号