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

    文章

    19155

    浏览量

    229057
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632714
  • keil
    +关注

    关注

    68

    文章

    1211

    浏览量

    166661
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49043

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    单片机视频教程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 4631次阅读
    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>类型有什么区别

    单片机的常量和变量与数组的详细资料说明

    本文档的主要内容详细介绍的是单片机的常量和变量与数组的详细资料说明包括了:单片机的常量,单片机变量,构造类型:数组,构造类型:结构体,构造
    发表于 12-11 17:36 13次下载
    <b class='flag-5'>单片机</b>的常量和<b class='flag-5'>变量</b>与数组的详细资料说明

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

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

    用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>

    PyTorch教程22.6之随机变量

    电子发烧友网站提供《PyTorch教程22.6之随机变量.pdf》资料免费下载
    发表于 06-06 09:24 0次下载
    PyTorch教程22.6之随<b class='flag-5'>机变量</b>

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

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

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

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

    接近开关的大小和种类什么来决定

    接近开关的大小和种类什么来决定  近开关的大小和种类多个因素来决定,下面将从材料、尺寸、电流
    的头像 发表于 01-03 17:13 499次阅读

    变压器容量大小什么决定的原理

    变压器容量大小输入电压、输出电压、输入电流、输出电流、频率、变压器的结构和材料等多个因素决定的。 首先,输入电压和输出电压的大小会直接影响变压器的容量。通常情况下,变压器的输入电压
    的头像 发表于 03-24 10:07 5382次阅读