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

这篇具有很好参考价值的文章主要介绍了不同数据类型在单片机内存中占多少字节?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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


一、不同编译器

类型 16位编译器大小 32位编译器大小 64位编译器大小
char 1个字节 1个字节 1个字节
char*(即指针变量) 2个字节 4个字节(32位的寻址空间是2^32,即32个bit,也就是4个字节) 8个字节
short int 2个字节 2个字节 2个字节
int 2个字节 4个字节 4个字节
unsigned int 2个字节 4个字节 4个字节
float 4个字节 4个字节 4个字节
double 8个字节 8个字节 8个字节
long 4个字节 4个字节 8个字节
long long 8个字节 8个字节 8个字节
unsigned long 4个字节 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位单片机
不同数据类型在单片机内存中占多少字节?,C语言,单片机,嵌入式硬件,经验分享
在单片机的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)结构体的总大小为结构体最大基本类型成员大小的整数倍。
不同数据类型在单片机内存中占多少字节?,C语言,单片机,嵌入式硬件,经验分享
不同数据类型在单片机内存中占多少字节?,C语言,单片机,嵌入式硬件,经验分享

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

空结构体会占一个字节的空间用于占位:
不同数据类型在单片机内存中占多少字节?,C语言,单片机,嵌入式硬件,经验分享

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 的对齐方式为成员中最大成员的对齐方式。
不同数据类型在单片机内存中占多少字节?,C语言,单片机,嵌入式硬件,经验分享文章来源地址https://www.toymoban.com/news/detail-728021.html

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;
};

到了这里,关于不同数据类型在单片机内存中占多少字节?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARM、树莓派、Arduino、单片机四者有什么不同

    一张图展示它们之间的关系,如下所示: 什么是arm? 其实ARM是一种微处理器架构,但它和“手臂”(Arm)毫无关系,哪怕在拼写上一样。虽然两者都十分强壮,但ARM更像一个小而精干的智能脑袋,可以帮助各种设备实现高效、可靠的计算和控制。 ARM,全称为Advanced RISC Mach

    2024年04月16日
    浏览(44)
  • 低端单片机彩色屏幕的内存占用疑惑

    问题: 假设320*240的rgb565屏幕,320*240*2=153600,内存已经150K了,而很多低端单片机接口速度虽然勉强能用,但内存只有20K/8K,整屏的显存是绝对放不下的,只刷一部分都占很多内存,低端单片机刷彩屏都是写哪刷哪静态刷新的吗?这种场合比较合适的解决方法是什么?外挂ra

    2024年01月19日
    浏览(45)
  • 单片机传感器类型一览

    一、单片机: c51、attiny85    arduino、stm8/stm32    esp8266、esp32、raspiberry pico 功能简单型:C51、Attiny85等 功能可以较复杂型:Arduino STM32 联网、人工智能等高级复杂型:esp8266 esp32、pico 二、基础元件(分为贴片式(SMT)和非贴片式): 晶振、电阻、电容、电感、led、开关、蜂鸣、

    2024年02月14日
    浏览(38)
  • STM32单片机 超入门项目:流水灯(不同闪烁模式和速度)

    流水灯通过交替闪烁实现灯光流动的效果,本篇将分析如何采用STM32单片机实现流水灯。 STM32单片机(STM32F103RCT6)、发光二极管 4(我用的是七彩快闪,用红绿蓝LDE自行搭配也可)、1k电阻 4、面包板飞线等自备。 打开STM32CubeMX,选择型号STM32F103RCT6,配置调试器PinoutConfigurati

    2023年04月09日
    浏览(42)
  • 使用gcc 工具链开发单片机程序,怎么查看内存映像

    一、概述 1.1 功能 1.2 命令格式 1.3 支持的目标文件 二、基本应用示例 2.1 查看单个对象文件 2.2 查看整个工程的内存映像 三、命令选项描述 3.1 以不同的进制格式显示内存映像 示例:以十六进制格式显示 3.2 不同的输出方式 3.2.1 可选的表示方式与对应的选项 3.2.2 -A (–format=

    2024年01月19日
    浏览(52)
  • C语言+单片机-内存分布详解,全网最全,值得收藏保存

    目录 一、C语言内存分区 1. 代码区 2. 常量区 3. 全局(静态)区 4. 堆区(heap) 5. 栈区(stack) 二、STM32存储器分配 1. 随机存储器—RAM 2. 只读存储器—ROM 三、基于STM32代码验证 1. 详细代码如下 2. 运行结果如下 四、单片机中的内存分布 1.含义解释 2. 程序存储分布 3.程序占用Flash和SRA

    2024年02月09日
    浏览(39)
  • 单片机入门基础:STM32 I/O类型及三种下载方式(完整版)

    这篇文章以上一篇文章为基础,做了补完,上一篇文章由于存在某些问题,已经隐藏 首先给大家科普一下什么是超链接 超链接(Hyperlink)是指在文档中通过某种方式嵌入的、可被点击的文本、图像或其他元素,它们通常用于在浏览器中跳转到其他文档、网页或资源。超链接

    2024年01月19日
    浏览(43)
  • 【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯

    实验内容: 利用所学的单片机知识及电路知识编程实现单片机 I/O 口检测按键输入电平。         1.选中 8 位数码管的其中 1 位数码管,当独立按键 1 每按下一次,数码管加一(按下期间加 1),范围为 0—F;         2.选中 8 位数码管的另 1 位数码管,当独立按键 2

    2024年02月06日
    浏览(47)
  • 常州工学院单片机及应用系统设计2021-2022 学年第 二 学期 考试类型 开卷 课程编码 0302005

          第一题 #include \\\"SC95F861x_C.H\\\" #include INTRINS.H unsigned char keydata=0; void delay(unsigned int timer)       //延时函数 {   while(timer0) timer--; } void IOinit() { P5CON=0x00; P5PH=0x03; P3CON=0xFF; P3PH=0xFF; } void readkey() { if(P 51 ==0) { delay(1000);       //延时去抖 if(P 51 ==0) { keydata=1; } } else if(P 50 ==0)

    2024年02月12日
    浏览(39)
  • c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

         单片机一般采用中断方式接受数据,这样便于及时处理 其中发送数据段采用的是查询方式,接收端采用了中断方式, 要注意的地方有: 在中断处理函数int_0()内,处理数据前要先关闭中断,否则中断可能会不断传过来, EA=0; 然后退出中断处理函数前恢复中断处理能力:

    2024年02月13日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包