news 2026/5/1 10:02:59

sizeof 核心原理:编译期的 “内存大小计算器”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sizeof 核心原理:编译期的 “内存大小计算器”

sizeof 是 C 语言的编译期运算符(非函数),核心作用是计算「数据类型或变量」的固有内存大小,结果在编译时就已确定,与运行期逻辑无关。

一、核心原理拆解

  1. 计算时机:编译期完成,不执行表达式
    • sizeof 不会运行括号内的表达式,仅通过表达式的 “类型” 推导大小。
    • 示例:int a=5; sizeof(a++); 中,a++ 不会执行(a 仍为 5),仅计算 int 类型大小(4 字节)。
  1. 计算对象:只关注 “固有类型”,不关心 “实际存储内容”
    • 对变量:等价于 sizeof(变量的类型)(如 sizeof(c) 等价于 sizeof(int*),c 是 int* 指针)。
    • 对类型:直接返回该类型的标准内存大小(如 sizeof(int)=4、sizeof(double)=8)。
  1. 大小规则:由类型和系统位数决定,与运行期状态无关
    • 基础类型(int、char 等):大小是语言标准或编译器规定的固定值(如 char 恒为 1 字节)。
    • 指针类型(任意 T*):大小由系统位数决定(64 位 = 8 字节,32 位 = 4 字节),与指向的类型无关。
    • 复合类型(数组、结构体):数组 sizeof(arr) = 元素个数 × 元素类型大小;结构体需考虑内存对齐(默认按最大成员类型对齐)。

二、关键误区

  • 为什么 sizeof(int* c) 是 8 字节?→ 因为 int* 是指针类型,64 位系统中所有指针类型的固有大小都是 8 字节。
  • 为什么 sizeof(c[3]) 是 4 字节?→ 因为 c[3] 的类型是 int,int 的固有大小是 4 字节,下标不改变类型。
  • 为什么 sizeof 拿不到堆内存大小?→ 堆内存是运行期 malloc 动态分配的,sizeof 编译时无法获取运行期的动态信息,只能计算指针本身的固有大小。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 9:54:17

宠物智能喂食器红外感应方案

宠物智能喂食器红外感应方案宠物行业在不知不觉当中已经成为了一个热门赛道,养宠物的人群越来越多,甚至一度在小红书上出现一只猫、一只狗能够让不同国家的用户在一起产生共鸣与碰撞,作为宠物行业配套的产业链宠物智能喂食器十分具有开发价值…

作者头像 李华
网站建设 2026/4/16 19:11:25

市场快评 · 今日复盘要点20251217

Q1:今日是否适合低吸? A:今日上涨个股3626 家,大于2500家阈值, 市场情绪得到修复, 把仓位加到 60%。 Q2:昨日最高标今日表现如何? A:昨日最高标 百大集团 今日继续涨停。 3:今日主线题材及板块龙头是谁? A:主线为 智能驾驶,板块龙头 暂时看不出来,核心容量标的为…

作者头像 李华
网站建设 2026/4/30 15:04:26

强化学习围捕仿真系统优化方案

强化学习围捕仿真系统优化方案 一、问题分析与现状评估 1.1 当前问题分析 在强化学习围捕仿真任务中,主要存在以下核心问题: 速度劣势:围捕艇速度慢于目标,无法通过速度优势直接捕获 成功率极低:2万轮次仅成功20多次,成功率约0.1% 学习效率低下:算法未能有效学习到有…

作者头像 李华
网站建设 2026/5/1 9:14:37

筛选器管理模块 Cordova 与 OpenHarmony 混合开发实战

📌 概述 筛选器管理模块允许用户保存和管理常用的筛选条件。该模块集成了 Cordova 框架与 OpenHarmony 原生能力,提供了完整的筛选器管理功能。用户可以创建多个筛选器,为每个筛选器设置特定的条件,然后快速应用这些筛选器来查看特…

作者头像 李华
网站建设 2026/5/1 1:58:54

每日统计模块 Cordova 与 OpenHarmony 混合开发实战

📌 概述 每日统计模块提供了每日喝茶数据的统计分析功能。该模块集成了 Cordova 框架与 OpenHarmony 原生能力,实现了高效的数据统计和可视化展示。用户可以查看特定日期的喝茶记录总数、消费金额、平均评分等统计数据。模块支持日期范围选择和数据导出。…

作者头像 李华