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

文章目录

  • 前言
  • 一、不同编译器
  • 二、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):2sizeof(int):4sizeof(long):4sizeof(float):4sizeof(double):8sizeof(long long):8sizeof(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.mzph.cn/news/97828.shtml

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

相关文章

LINGO-1 - 自动驾驶的 视觉语言动作模型

文章目录 LINGO-1: Exploring Natural Language for Autonomous Driving https://wayve.ai/thinking/lingo-natural-language-autonomous-driving/ 【LINGO-1:将自然语言应用于无人驾驶增强学习和可解释性】 探索将视觉、语言和行动相结合的视觉语言行动模型(VLAM)…

运维常见的22个故障排查和10个问题解决技巧大汇总!

作为运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个运维工程师良好的习惯。每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是…

HTTPS工作过程,国家为什么让http为什么要换成https,Tomcat在MAC M1电脑如何安装,Tomcat的详细介绍

目录 引言 一、HTTPS工作过程 二、Tomcat 在访达中找到下载好的Tomcat文件夹(这个要求按顺序) zsh: permission denied TOMCAT的各部分含义: 引言 在密码中一般是:明文密钥->密文(加密) &#xff…

机器学习笔记 - 深入研究spaCy库及其使用技巧

一、简述 spaCy 是一个用于 Python 中高级自然语言处理的开源库。它专为生产用途而设计,这意味着它不仅功能强大,而且快速高效。spaCy 在学术界和工业界广泛用于各种 NLP 任务,例如标记化、词性标注、命名实体识别等。 安装,这里使用阿里的源。 pip install spacy…

三十二、【进阶】hash索引结构

1、hash索引结构 (1)简述: hash索引,就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。 (2)图示: 2、hash索引结构…

elasticsearch深度分页问题

一、深度分页方式from size es 默认采用的分页方式是 from size 的形式,在深度分页的情况下,这种使用方式效率是非常低的,比如我们执行如下查询 1 GET /student/student/_search 2 { 3 "query":{ 4 "match_all":…

Ansible系列 | Ansible变量详解

Ansible系列 | Ansible变量详解 1. 在Inventory中定义变量2. 在Playbook中定义变量2.1. 通过vars关键字定义变量2.2. 通过vars_files关键字引入变量文件2.3. 通过vars_prompt来实现人机交互3. 内置变量3.1. hostvars3.2. group_names3.3. groups3.4. inventory_hostname与inven…

【算法练习Day15】平衡二叉树二叉树的所有路径左叶子之和

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 平衡二叉树二叉树的所有路径…

周总结【java项目】

项目进度: 学习了JavaFX,下载了sceneBuilder辅助工具构建窗口(目前建立了登陆,注册,忘记密码的界面),然后是学习了MySQL的连接,现在的项目是刚连上数据库; 下一步&…

多线程锁-synchronized字节码分析

从字节码角度分析synchronized实现 javap -c(v附加信息) ***.class 文件反编译 synchronized同步代码块 >>>实现使用的是monitorenter和monitorexit指令 synchronized普通同步方法 >>>调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置&#xf…

【项目】5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型

5.1阻塞和非阻塞、同步和异步(网络IO) 典型的一次IO的两个阶段是什么?数据就绪和数据读写 数据就绪:根据IO操作的就绪状态 阻塞非阻塞 数据读写:根据应用程序和内核的交互方式 同步异步 陈硕:在处理IO的…

华为云API自然语言处理的魅力—AI情感分析、文本分析

云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI自言语言的情感分析、文本分词、文本翻译 1 IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE&a…

Mac os 点击桌面 出现黑边框 解决

1、桌面黑框效果 2、解决:设置为 仅在台前调度中

img标签src动态绑定资源失败问题

img标签src动态绑定资源失败问题 需要采用require的方式进行 在 Vue 中,require 是一个通用的模块加载函数,用于在运行时(客户端或服务器端)引入模块。它通常用于加载 JavaScript 文件、JSON 数据、静态资源等。 组件使用&#xf…

6.01 定时任务,关闭超时订单

步骤1:创建定时任务类 import com.imooc.service.OrderService; import com.imooc.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.s…

mysql在Ubuntu中新增用户配置

打开终端(Terminal)。 使用超级用户权限登录到 MySQL 服务器。如果您知道MySQL的root用户密码,可以运行以下命令并输入密码: sudo mysql -u root -p 如果您没有设置MySQL root密码,可以直接使用以下命令登录&#xff…

读书笔记--未来简史关键金句和阅读感悟

借着国庆假期,终于有时间研读了尤瓦尔.赫拉利的《未来简史》,作者的写作方式、文笔、观察视角都是我喜欢的类型,作者从古到今,谈到了上帝、神、宗教、科技、生物、智人到未来的超人智神(数据主义)&#xff…

Elasticsearch:时间点 API

Elasticsearch:时间点 API-CSDN博客 在今天的文章中,我将着重介绍 Point in time API。在接下来的文章中,我将介绍如何运用 PIT 来对搜索结果进行分页。这也是被推荐使用的方法。 Point in time API 默认情况下,搜索请求针对目标…

水波纹文字效果动画

效果展示 CSS 知识点 text-shadow 属性绘制立体文字clip-path 属性来绘制水波纹 工具网站 CSS clip-path maker 效果编辑器 页面整体结构实现 使用多个 H2 标签来实现水波纹的效果实现&#xff0c;然后使用clip-path结合动画属性一起来进行波浪的起伏动画实现。 <div …

Android 使用 registerForActivityResult() 打开系统相册或相机获取图像

一、简介 当使用了 AndroidX 后&#xff0c;发现 startActivityForResult() 标记为过时了&#xff0c;而是推荐我们使用 registerForActivityResult() 函数。 registerForActivityResult() 函数是 Android 中用于启动 Activity 结果回调的新方式。这个函数的目的是简化在 Act…