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

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

char、short、int、lon

g、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 值是未定义行为。

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")


# linux  # git  # windows  # 字节  # ai  # c++  # ios  # win  # stream  # 内存占用  # 架构  # 数据类型  # Float  # for  # 结构体  # bool  # char  # int  # double  # void  # 指针  # 指针类型  # 位宽  # 的是  # 都是  # 是在  # 那是  # 但在  # 各有  # 几乎所有  # 但不  # 多为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: bing浏览器学术搜索入口_bing学术文献检索地址  如何在IIS7中新建站点?详细步骤解析  如何基于云服务器快速搭建网站及云盘系统?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Android okhttputils现在进度显示实例代码  Laravel如何实现模型的全局作用域?(Global Scope示例)  java获取注册ip实例  Linux系统运维自动化项目教程_Ansible批量管理实战  米侠浏览器网页背景异常怎么办 米侠显示修复  JavaScript如何实现音频处理_Web Audio API如何工作?  详解Android图表 MPAndroidChart折线图  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何注册花生壳免费域名并搭建个人网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  怎么用AI帮你为初创公司进行市场定位分析?  Laravel如何优化应用性能?(缓存和优化命令)  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何用好域名打造高点击率的自主建站?  LinuxCD持续部署教程_自动发布与回滚机制  html如何与html链接_实现多个HTML页面互相链接【互相】  中山网站推广排名,中山信息港登录入口?  如何在云主机上快速搭建多站点网站?  如何在万网利用已有域名快速建站?  WEB开发之注册页面验证码倒计时代码的实现  高端建站如何打造兼具美学与转化的品牌官网?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Linux系统命令中screen命令详解  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  如何确保FTP站点访问权限与数据传输安全?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  5种Android数据存储方式汇总  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  中山网站制作网页,中山新生登记系统登记流程?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何实现数据库事务?(DB Facade示例)  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  想要更高端的建设网站,这些原则一定要坚持!  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  教你用AI润色文章,让你的文字表达更专业  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Android中AutoCompleteTextView自动提示  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】