0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机变量存储大小由什么决定?

strongerHuang 来源:strongerHuang 2024-01-26 10:11 次阅读

最近看到群友在讨论【单片机变量存储大小由什么决定?】的话题

比如:int、long int 有多大?结构体占多大空间?

描述

在实际情况中,不同的处理器架构、操作系统、以及编译器等都不是决定整形变量大小的关键因素,比如:51、ARM、x86、x64等不同的处理器架构,FreeRTOSLinux、Windows等不同的操作系统,gcc、AC、clang等不同编译器。

主要是处理器位数决定。(当然,目前我验证过的所有情况是由处理器位数决定,其他决定性因素有待考证)

首先,整型变量大小由编译器(编译)得来,而编译器首先会考虑编译环境(这个环境主要是CPU的位数)。

之前给大家分享过《Keil验证8位和32位单片机变量占用空间大小》,其中就体现了8位和32位CPU中变量占用空间的大小。

验证

之前分享《用Keil验证8位和32位单片机变量占用空间大小》的内容,主要在Keil这个编译环境下,通过编译大小验证。

这其中是想描述Keil环境下CPU位数,以及大小端对变量占用空间大小的影响。

而最直接的办法则是通过sizeof得出大小,打印出来。 这里额外提一下sizeof 和 sizeof 的区别:

sizeof通常计算变量大小,strlen计算字符串长度

sizeof是运算操作符,strlen是函数

sizeof在编译的时候得出大小,strlen要考虑’\0字符的长度

例子源代码:

#include 


intmain(void)
{
  printf( "         char: %d
" , sizeof(char));
  printf( "    short int: %d
" , sizeof(short int));
  printf( "          int: %zd
" , sizeof(int));
  printf( "     long int: %d
", sizeof(long int));
  printf( "long long int: %d
", sizeof(long long int));
  printf( "        float: %d
", sizeof(float));
  printf( "       double: %d
", sizeof(double));


  return 0;
}

大家可以试着用不同的编译环境试试上面这部分代码,看看有什么差别。

这里简单举例两个:

1.Keil MDK编译,直接下载STM32中串口打印输出。

9ffe3da0-bbe1-11ee-8b88-92fbcf53809c.png

串口输出结果:

         char: 1
    short int: 2
          int: 4
     long int: 4
long long int: 8
        float: 4
       double: 8

a0027e9c-bbe1-11ee-8b88-92fbcf53809c.png

2.在线编译器 这里我用的在线编译器,网址: https://rextester.com/l/c_online_compiler_gcc (复制到浏览器直接打开即可) gcc编译:

a0061610-bbe1-11ee-8b88-92fbcf53809c.png




clang编译:

a00aadc4-bbe1-11ee-8b88-92fbcf53809c.png




以及其他环境,输出情况都一样,因为是在同一台电脑(操作系统、CPU位数都一样)。

         char: 1
    short int: 2
          int: 4
     long int: 8
long long int: 8
        float: 4
       double: 8
如果你换到平台,可能结果就不一样了。通过对比各种结果,你自然会得出结论。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222157
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620826
  • keil
    +关注

    关注

    68

    文章

    1196

    浏览量

    165311
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48614

原文标题:单片机变量存储大小由什么决定?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    手机扩展内存的大小 什么决定

    手机扩展内存的大小 什么决定?谢谢
    发表于 07-30 16:43

    请问单片机输出脉冲电平的峰值什么决定

    最近要做个多路的有时序的1mv小信号脉冲信号发生器,要求精度2%,下面有些疑惑望论坛大大解答~~1、单片机输出脉冲电平的峰值什么决定?是不是单片机供电电压是多少峰值就是多少呢?还有就
    发表于 01-23 06:35

    基于随机变量相似度的ICA方法

    从随机变量(微分)熵的概念出发,定义了随机变量的相似度,讨论了用求相似度极点的方法实现观测数据线性组合非高斯性最大化,从而串行估计独立分量分析(ICA)模型中的独立分量
    发表于 11-09 14:51 5次下载

    机变量集的一种正相依结构

    机变量集的一种正相依结构:引进随机变量集的强正相依(SPD) 的概念, SPD 的条件弱于相协性(A ) , 强于SPOD;本文推广关于A 的某些结果, 且推导SPD 的一些基本性质、给出SPD 的各种等价
    发表于 12-29 23:48 17次下载

    单片机视频教程07:变量

    《手把手教你学单片机单片机视频教程07:变量 单片机视频教程07:变量 1、局部变量,在函数内
    发表于 08-21 09:35 1.2w次阅读
    <b class='flag-5'>单片机</b>视频教程07:<b class='flag-5'>变量</b>

    Keil C51单片机变量的使用方法详细介绍

    8051内核单片机是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功。由于51内核单片机
    发表于 11-24 10:20 4335次阅读
    Keil C51<b class='flag-5'>单片机变量</b>的使用方法详细介绍

    51单片机RAM数据存储区的学习笔记资料免费下载

    RAM是程序运行中存放随机变量的数据空间。在keil中编写程序,如果当前模式为small模式,如果总的变量大小未超过128B,则未初始化的变量的初值默认为0.如果所有的变量超过
    发表于 03-13 15:16 4次下载
    51<b class='flag-5'>单片机</b>RAM数据<b class='flag-5'>存储</b>区的学习笔记资料免费下载

    51单片机RAM数据存储区学习笔记的详细资料说明

    RAM是程序运行中存放随机变量的数据空间。在keil中编写程序,如果当前模式为small模式,如果总的变量大小未超过128B,则未初始化的变量的初值默认为0.如果所有的变量超过
    发表于 04-15 18:24 0次下载
    51<b class='flag-5'>单片机</b>RAM数据<b class='flag-5'>存储</b>区学习笔记的详细资料说明

    51单片机的RAM数据存储区学习知识点笔记免费下载

    所有的变量超过单片机small模式下的128B大小,则必须对变量进行初始化,否则超过RAM大小变量
    发表于 09-17 17:21 0次下载
    51<b class='flag-5'>单片机</b>的RAM数据<b class='flag-5'>存储</b>区学习知识点笔记免费下载

    51单片机变量存储类型有什么区别

    本文档的主要内容详细介绍的是51单片机变量存储类型有什么区别。
    发表于 07-03 17:41 0次下载
    51<b class='flag-5'>单片机</b>中<b class='flag-5'>变量</b>的<b class='flag-5'>存储</b>类型有什么区别

    如何用Keil来验证单片机变量占多少字节

        首先问大家两个问题: 8位单片机定义一个  int  型变量,占几个字节? 32位 单片机定义一个  char  型变量,占几个字节?   我敢说很多人都不知道,或者存在疑惑。
    的头像 发表于 10-29 10:20 4764次阅读

    用Keil验证8位和32位单片机变量占用空间大小

    关注+星标公众号,不错过精彩内容作者 | strongerHuang微信公众号|嵌入式专栏首先问大家两个问题:8位单片机定义一个 int型变量,占几个字节?32位单片机定义一个 ch...
    发表于 11-18 19:51 10次下载
    用Keil验证8位和32位<b class='flag-5'>单片机变量</b>占用空间<b class='flag-5'>大小</b>

    如何用不同方法验证单片机变量大小呢?

    有人说单片机开发很简单,也有人说很难。
    发表于 06-26 09:11 538次阅读
    如何用不同方法验证<b class='flag-5'>单片机变量</b>的<b class='flag-5'>大小</b>呢?

    单片机位带牵涉的指针变量问题

    单片机位带牵涉的指针变量问题
    的头像 发表于 09-27 15:18 301次阅读
    <b class='flag-5'>单片机</b>位带牵涉的指针<b class='flag-5'>变量</b>问题

    单片机大小端转换的几点小技巧

    单片机大小端转换的几点小技巧
    的头像 发表于 09-18 10:58 808次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>大小</b>端转换的几点小技巧