<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機變量存儲大小由什么決定?

strongerHuang ? 來源:strongerHuang ? 2024-01-26 10:11 ? 次閱讀

最近看到群友在討論【單片機變量存儲大小由什么決定?】的話題。

比如:int、long int 有多大?結構體占多大空間?

描述

在實際情況中,不同的處理器架構、操作系統、以及編譯器等都不是決定整形變量大小的關鍵因素,比如:51、ARM、x86、x64等不同的處理器架構,FreeRTOS、 Linux、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

    文章

    18475

    瀏覽量

    223054
  • 單片機
    +關注

    關注

    6007

    文章

    44036

    瀏覽量

    622219
  • keil
    +關注

    關注

    68

    文章

    1196

    瀏覽量

    165523
  • 編譯器
    +關注

    關注

    1

    文章

    1579

    瀏覽量

    48702

原文標題:單片機變量存儲大小由什么決定?

文章出處:【微信號: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 ?4372次閱讀
    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 ?4837次閱讀

    用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 ?597次閱讀
    如何用不同方法驗證<b class='flag-5'>單片機變量</b>的<b class='flag-5'>大小</b>呢?

    單片機位帶牽涉的指針變量問題

    單片機位帶牽涉的指針變量問題
    的頭像 發表于 09-27 15:18 ?324次閱讀
    <b class='flag-5'>單片機</b>位帶牽涉的指針<b class='flag-5'>變量</b>問題

    單片機大小端轉換的幾點小技巧

    單片機大小端轉換的幾點小技巧
    的頭像 發表于 09-18 10:58 ?849次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>大小</b>端轉換的幾點小技巧
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>