不同数据类型在单片机内存中占多少字节?

news2024/10/6 5:56:13

文章目录

  • 前言
  • 一、不同编译器
  • 二、C51
    • * 指针型
  • 三、sizeof
    • 结构体
    • 联合体


前言

在C语言中,数据类型指的是用于声明不同类型的变量或者函数的一个广泛的系统。变量的类型决定了变量存储占用的空间


一、不同编译器

类型16位编译器大小32位编译器大小64位编译器大小
char1个字节1个字节1个字节
char*(即指针变量)2个字节4个字节(32位的寻址空间是2^32,即32个bit,也就是4个字节)8个字节
short int2个字节2个字节2个字节
int2个字节4个字节4个字节
unsigned int2个字节4个字节4个字节
float4个字节4个字节4个字节
double8个字节8个字节8个字节
long4个字节4个字节8个字节
long long8个字节8个字节8个字节
unsigned long4个字节4个字节8个字节
32位编译器下:
sizeof(char):1  
 
sizeof(short):2
 
sizeof(int):4
 
sizeof(long):4
 
sizeof(float):4
 
sizeof(double):8
 
sizeof(long long):8
 
sizeof(p):4,(p为指针)

指针用来记录另一个对象的地址,在32位计算机中,一个指针变量的返回值必定是4。
指针变量的sizeof值与指针所指的对象没有任何关系。

二、C51

C51属于8位单片机
C51
在单片机的C语言中我们默认的规则如下:short int即为int,long int即为long,前面若无unsigned符号则一律认为是signed型。

* 指针型

指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占用一定的内存单元,对不同的处理器其长度不一样,在C51中它的长度一般为1~3个字节。

三、sizeof

sizeof是C语言的一种单目操作符,如C语言的其他操作符++、–等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。

1.用于数据类型
使用形式:sizeof(type)
数据类型必须使用括号括住

2.用于变量
使用形式:sizeof(变量名) 或 sizeof + 变量名,变量名可以不用括号括住
sizeof 操作符不能用于函数类型,不完全类型或位字段,不完全类型指具有未知存储大小的数据类型,如:未知存储大小的数组类型、未知内容的结构或联合类型、void 类型等。

结构体

当没有定义 #pragma pack(value) 这种指定 value 字节进行对齐时,结构体的 sizeof 涉及到字节对齐的问题,一般满足三个准则:
(1)结构体变量的首地址能够被其最大基本类型成员的大小所整除。

(2)结构体的每个成员相对于结构体首地址的偏移量都是成员大小的整数倍。

(3)结构体的总大小为结构体最大基本类型成员大小的整数倍。
eg2
eg3

字节对齐,在 char 后会填充三个字节

空结构体会占一个字节的空间用于占位:
eg1

typedef struct
{
    char a[5];
    int b;
    double c;
}Test;
  没有指定字节对齐。在结构体成员中,a占5个字节,b占4个字节,c占8个字节。5+4+8=17.但是17不是 8的倍数,所以(5+3)+(4+4)+8=24.故占24个字节。

当定义了 #pragma pack(value),以 value字节进行对齐时,它的计算规则如下:整体的大小必须为 value 的最小整数倍。
#pragma pack(4)
typedef struct
{
    char a[5];
    int b;
    double c;
}Test;
   指定4字节对齐,所以(5+3)+4+8=20。故占20个字节。

#pragma pack(2)
typedef struct
{
    char a[5];
    int b;
    double c;
}Test;
   如果指定2字节对齐,那么就是(5+1)+4+8=18个字节。

联合体

联合体各成员共享一个内存,联合体的大小取决于他所有成员中占用空间最大的一个成员的大小。并且对于复合数据类型,如union,struct, class 的对齐方式为成员中最大成员的对齐方式。
eg5

union u               //u的大小是其中最大的double类型成员a,所以sizeof(u) = sizeof(double) = 8;
{
 double a;
 int b;
};

union u1           // u1的大小是char[13] 类型的数组,但由于另一个成员int b ,所以要以4对齐,13以4对齐就是补3位到16;
{
 char a[13];
 int b;
};

union u2          // u2的大小是char[13]类型的数组,不需要补齐,所以长度为13;
{
 char a[13];
 char b;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1801_codesys产品主样本了解

全部学习汇总: GreyZhang/g_codesys: some codesys learning notes (github.com) 有些技术、学术的成长,氛围也是很重要的。我觉得工业控制,德国做得算是世界上很突出的。而这个巴伐利亚,更是突出中的佼佼者了。从这里的介绍看&am…

React核心原理与实际开发

学习目标 React是啥? 官方定义:将前端请求获取到的数据渲染为HTML视图的JavaScript库。 一、React入门 1、React项目创建 直接创建react,使用初始化会创建package.json npm init -y再安装 2、React基本使用 使用纯JS创建ReactDOM&#…

C语言数据结构2 1.2 算法

算法的基本概念 算法的定义 算法是对特定问题求解步骤的一种描述,它是指定的有限序列,其中的每条指令表示一个或多个操作。 例、 算法的特性 (5个) 1.有穷性 一个算法总在执行有穷步之后结束,且每一步都可以在有穷…

医疗器械标准目录汇编2022版共178页(文中附下载链接!)

为便于更好地应用医疗器械标准,国家药监局医疗器械标准管理中心组织对现行1851项医疗器械国家和行业标准按技术领域,编排形成《医疗器械标准目录汇编(2022版)》 该目录汇编分为通用技术领域和专业技术领域两大类,通用…

计算机网络 第三章数据链路层

文章目录 1、数据链路层概述 1、数据链路层概述

C语言:选择+编程(每日一练Day9)

目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:自除数 思路一: 题二:除自身以外数组的乘积 思路二: 本人实力有限可能对…

2.2.3 vim操作合集

1 vim VIM 是 Linux 系统上一款文本编辑器,学习 VIM 最好的文档,应该是阅读学习 VIM 的帮助文档,可以使用本地的帮助文件(vim--->:help),或者使用在线帮助文档。同时针对vim的使用,相应的相书籍也很多,如下 2 vim操作模式 命令模式:默认模式,该模式下可以移动光标…

ChatGPT付费创作系统V2.3.4独立版 +WEB端+ H5端 + 小程序最新前端

人类小徐提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT,流量超级大,引流不要太简单!一键下单即可拥有自己的GPT&#xff0…

LVGL_基础控件checkbox

LVGL_基础控件checkbox 1、创建checkbox /* 创建一个 checkbox 部件(对象) */ lv_obj_t * cb lv_checkbox_create(lv_scr_act()); // 创建一个 switch 部件(对象),他的父对象是活动屏幕对象 lv_checkbox_set_text(cb, "100ASK LVGL Tutorial" LV_SYMBOL_PLAY);…

qml保姆级教程四:按钮组件

💂 个人主页:pp不会算法v 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 QML系列教程 QML教程一:布局组件 文章目录 AbstractButton…

汽车类、TPS7B8225QDGNRQ1、TPS7B8233EPWPRQ1、TPS7B8601QKVURQ1 40V、低压降 (LDO) 线性稳压器

一、TPS7B82-Q1 汽车类 300mA、高压、超低 IQ 低压降稳压器 (介绍)在汽车电池连接应用中,低静态电流 (IQ) 对于省电和延长电池寿命而言至关重要。对于始终开启的系统,必须要实现超低 IQ。 TPS7B82-Q1 是一款旨在在 3V 至 40V&…

Java毕业设计 SpringBoot 网上体育商城系统 商城系统

Java毕业设计 SpringBoot 网上体育商城系统 商城系统 SpringBoot 网上体育商城系统 功能介绍 首页 图片轮播 搜索 用户登录注册 商品信息 商品分类 商品详情 收藏 评论 添加到购物车 立即购买 购物车 确认下单 公告信息 留言反馈 个人中心 修改个人信息 我的订单 退款 我的地…

地图资源下载工具2.0

一、简介 地图资源工具是一款用于GIS数据下载的工具,用于GIS数据矢量、遥感数据的查询、下载及浏览。下载数据包括:哨兵(Sentinel)系列,LANDSAT系列,MODIS系列、ASTER系列、GOES系列、OPENSTREETMAP数据…

传输层协议—TCP协议

传输层协议—TCP协议 文章目录 传输层协议—TCP协议TCP协议段格式四位首部长度TCP协议如何根据目的端口号将数据传输给指定进程?32位序列号和32位确认序列号可靠性问题 TCP报头标志位16位紧急指针16位检验和确认应答机制超时重传机制再谈三次握手四次挥手 连接管理机…

XC5013 马达驱动和充电集成一体的控制芯片 一档输出芯片

XC5013 是一款应用于马达驱动或 LED 驱动的控制芯片,集成了锂电池充电管理系统,设定一档高电平输 出,并带有对不同状态的 LED 指示功能。 XC5013 集成了涓流充电、恒流充电和恒压充电全过程的充电方式,浮充电压精度在全温度范…

GEE16: 区域日均降水量计算

Precipitation 1. 区域日均降水量计算2. 降水时间序列3. 降水数据年度时间序列对比分析 1. 区域日均降水量计算 今天分析一个计算区域日均降水量的方法: 数据信息:   Climate Hazards Group InfraRed Precipitation with Station data (CHIRPS) is a…

国庆假期作业6

一、ARM的工作模式 1、非特权模式 user模式:非特权模式,大部分任务执行在这种模式 2、特权模式 异常模式: FIQ : 当一个快速(fast) 中断产生时将会进入这种模式 IRQ : 当一个通用(normal) 中断产生时将会进入这种模式…

物联网系统中物模型定义的简要说明

物模型由若干条“参数”组成,参数按描述的功能类型不同,又分为属性、方法和事件。 标准参数 为了实现设备功能的统一理解。 说的直白一些的理解,可以这样去理解: 属性,就是定义的由设备端规律性的定期上报的数据。 事件,就是定…

【在凸多边形的图像中查找顶点】估计具有已知顶点数的像素化凸多边形角点研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2.2.3.1vim + ctags + cscope + taglist

在window下,我们一般用Source Insight来查看代码而在linux下,使用vim来查看代码,vim是一个简单的文本浏览/编辑器,它可以通过插件的形式,搭建一个完全的类Source Insight环境,通过快捷键的形式,快速查看、定位变量/函数,本文就是基于vim,通过ctags+cscope+taglist+Ner…