RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)變量存儲大小由什么決定?

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

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

比如:int、long int 有多大?結(jié)構(gòu)體占多大空間?

描述

在實際情況中,不同的處理器架構(gòu)、操作系統(tǒng)、以及編譯器等都不是決定整形變量大小的關(guān)鍵因素,比如:51、ARM、x86、x64等不同的處理器架構(gòu),FreeRTOS、 Linux、Windows等不同的操作系統(tǒng),gcc、AC、clang等不同編譯器。

主要是處理器位數(shù)決定。(當(dāng)然,目前我驗證過的所有情況是由處理器位數(shù)決定,其他決定性因素有待考證)

首先,整型變量大小由編譯器(編譯)得來,而編譯器首先會考慮編譯環(huán)境(這個環(huán)境主要是CPU的位數(shù))。

之前給大家分享過《Keil驗證8位和32位單片機(jī)變量占用空間大小》,其中就體現(xiàn)了8位和32位CPU中變量占用空間的大小。

驗證

之前分享《用Keil驗證8位和32位單片機(jī)變量占用空間大小》的內(nèi)容,主要在Keil這個編譯環(huán)境下,通過編譯大小驗證。

這其中是想描述Keil環(huán)境下CPU位數(shù),以及大小端對變量占用空間大小的影響。

而最直接的辦法則是通過sizeof得出大小,打印出來。 這里額外提一下sizeof 和 sizeof 的區(qū)別:

sizeof通常計算變量大小,strlen計算字符串長度

sizeof是運算操作符,strlen是函數(shù)

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

大家可以試著用不同的編譯環(huán)境試試上面這部分代碼,看看有什么差別。

這里簡單舉例兩個:

1.Keil MDK編譯,直接下載STM32中串口打印輸出。

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

串口輸出結(jié)果:

         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.在線編譯器 這里我用的在線編譯器,網(wǎng)址: https://rextester.com/l/c_online_compiler_gcc (復(fù)制到瀏覽器直接打開即可) gcc編譯:

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




clang編譯:

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




以及其他環(huán)境,輸出情況都一樣,因為是在同一臺電腦(操作系統(tǒng)、CPU位數(shù)都一樣)。

         char: 1
    short int: 2
          int: 4
     long int: 8
long long int: 8
        float: 4
       double: 8
如果你換到平臺,可能結(jié)果就不一樣了。通過對比各種結(jié)果,你自然會得出結(jié)論。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19259

    瀏覽量

    229649
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634618
  • keil
    +關(guān)注

    關(guān)注

    68

    文章

    1212

    瀏覽量

    166839
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108

原文標(biāo)題:單片機(jī)變量存儲大小由什么決定?

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    手機(jī)擴(kuò)展內(nèi)存的大小 什么決定

    手機(jī)擴(kuò)展內(nèi)存的大小 什么決定?謝謝
    發(fā)表于 07-30 16:43

    單片機(jī)視頻教程07:變量

    《手把手教你學(xué)單片機(jī)單片機(jī)視頻教程07:變量 單片機(jī)視頻教程07:變量 1、局部變量,在函數(shù)內(nèi)
    發(fā)表于 08-21 09:35 ?1.2w次閱讀
    <b class='flag-5'>單片機(jī)</b>視頻教程07:<b class='flag-5'>變量</b>

    Keil C51單片機(jī)變量的使用方法詳細(xì)介紹

    8051內(nèi)核單片機(jī)是一種通用單片機(jī),在國內(nèi)占有較大的市場份額。在將C語言用于51內(nèi)核單片機(jī)的研究方面,Keil公司做得最為成功。由于51內(nèi)核單片機(jī)
    發(fā)表于 11-24 10:20 ?4686次閱讀
    Keil C51<b class='flag-5'>單片機(jī)變量</b>的使用方法詳細(xì)介紹

    51單片機(jī)RAM數(shù)據(jù)存儲區(qū)的學(xué)習(xí)筆記資料免費下載

    RAM是程序運行中存放隨機(jī)變量的數(shù)據(jù)空間。在keil中編寫程序,如果當(dāng)前模式為small模式,如果總的變量大小未超過128B,則未初始化的變量的初值默認(rèn)為0.如果所有的變量超過
    發(fā)表于 03-13 15:16 ?4次下載
    51<b class='flag-5'>單片機(jī)</b>RAM數(shù)據(jù)<b class='flag-5'>存儲</b>區(qū)的學(xué)習(xí)筆記資料免費下載

    51單片機(jī)RAM數(shù)據(jù)存儲區(qū)學(xué)習(xí)筆記的詳細(xì)資料說明

    RAM是程序運行中存放隨機(jī)變量的數(shù)據(jù)空間。在keil中編寫程序,如果當(dāng)前模式為small模式,如果總的變量大小未超過128B,則未初始化的變量的初值默認(rèn)為0.如果所有的變量超過
    發(fā)表于 04-15 18:24 ?0次下載
    51<b class='flag-5'>單片機(jī)</b>RAM數(shù)據(jù)<b class='flag-5'>存儲</b>區(qū)學(xué)習(xí)筆記的詳細(xì)資料說明

    51單片機(jī)的RAM數(shù)據(jù)存儲區(qū)學(xué)習(xí)知識點筆記免費下載

    所有的變量超過單片機(jī)small模式下的128B大小,則必須對變量進(jìn)行初始化,否則超過RAM大小變量
    發(fā)表于 09-17 17:21 ?0次下載
    51<b class='flag-5'>單片機(jī)</b>的RAM數(shù)據(jù)<b class='flag-5'>存儲</b>區(qū)學(xué)習(xí)知識點筆記免費下載

    51單片機(jī)變量存儲類型有什么區(qū)別

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)變量存儲類型有什么區(qū)別。
    發(fā)表于 07-03 17:41 ?0次下載
    51<b class='flag-5'>單片機(jī)</b>中<b class='flag-5'>變量</b>的<b class='flag-5'>存儲</b>類型有什么區(qū)別

    單片機(jī)的常量和變量與數(shù)組的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)的常量和變量與數(shù)組的詳細(xì)資料說明包括了:單片機(jī)的常量,單片機(jī)變量,構(gòu)造類型:數(shù)組,構(gòu)造類型:結(jié)構(gòu)體,構(gòu)造
    發(fā)表于 12-11 17:36 ?13次下載
    <b class='flag-5'>單片機(jī)</b>的常量和<b class='flag-5'>變量</b>與數(shù)組的詳細(xì)資料說明

    如何用Keil來驗證單片機(jī)變量占多少字節(jié)

    ? ? 首先問大家兩個問題: 8位單片機(jī)定義一個? int ?型變量,占幾個字節(jié)? 32位 單片機(jī)定義一個? char ?型變量,占幾個字節(jié)? ? 我敢說很多人都不知道,或者存在疑惑。
    的頭像 發(fā)表于 10-29 10:20 ?5336次閱讀

    用Keil驗證8位和32位單片機(jī)變量占用空間大小

    關(guān)注+星標(biāo)公眾號,不錯過精彩內(nèi)容作者 | strongerHuang微信公眾號|嵌入式專欄首先問大家兩個問題:8位單片機(jī)定義一個 int型變量,占幾個字節(jié)?32位單片機(jī)定義一個 ch...
    發(fā)表于 11-18 19:51 ?10次下載
    用Keil驗證8位和32位<b class='flag-5'>單片機(jī)變量</b>占用空間<b class='flag-5'>大小</b>

    PyTorch教程22.6之隨機(jī)變量

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程22.6之隨機(jī)變量.pdf》資料免費下載
    發(fā)表于 06-06 09:24 ?0次下載
    PyTorch教程22.6之隨<b class='flag-5'>機(jī)變量</b>

    如何用不同方法驗證單片機(jī)變量大小呢?

    有人說單片機(jī)開發(fā)很簡單,也有人說很難。
    發(fā)表于 06-26 09:11 ?953次閱讀
    如何用不同方法驗證<b class='flag-5'>單片機(jī)變量</b>的<b class='flag-5'>大小</b>呢?

    單片機(jī)位帶牽涉的指針變量問題

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

    接近開關(guān)的大小和種類什么來決定

    接近開關(guān)的大小和種類什么來決定? 近開關(guān)的大小和種類多個因素來決定,下面將從材料、尺寸、電流
    的頭像 發(fā)表于 01-03 17:13 ?531次閱讀

    變壓器容量大小什么決定的原理

    變壓器容量大小輸入電壓、輸出電壓、輸入電流、輸出電流、頻率、變壓器的結(jié)構(gòu)和材料等多個因素決定的。 首先,輸入電壓和輸出電壓的大小會直接影響變壓器的容量。通常情況下,變壓器的輸入電壓
    的頭像 發(fā)表于 03-24 10:07 ?5851次閱讀
    RM新时代网站-首页