閑聊c/c++: 各平臺下基本數(shù)據(jù)類型的字節(jié)長度

本篇目的:

  1. 了解c/c++的基本數(shù)據(jù)類型有哪些
  2. 測試基本數(shù)據(jù)類型在各個平臺前方,各個編譯器下的sizeof長度
  3. 了解c/c++交叉編譯概念

如果想編寫跨平臺的c/c++程序,第一個要了解的就是基本數(shù)據(jù)類型在各操作系統(tǒng)喝峦,各個cpu架構(gòu)下,各個編譯器中的字節(jié)長度!

1. c/c++中的基本數(shù)據(jù)類型有哪些:

  • [unsigned] char
  • [unsigned] short
  • [unsigned] int
  • [unsigned] long
  • [unsigned] long int
  • [unsigned] long long
  • float
  • double
  • long double
  • wchar_t(c99)
  • bool(c++增加的數(shù)據(jù)類型,c中沒有bool類型)
    補充說明:c99中<stdbool.h>中定義了bool類型呜达,sizeof(bool) = 1 byte
  • 指針(應(yīng)該不是基本類型吧谣蠢,但是sizeof的結(jié)果很重要,也一并放在此處)

2. 測試程序:

#include <stdio.h>
void print_pds_size()
{
    printf("sizeof(char) = %d bytes\n", sizeof(char));
    printf("sizeof(short) = %d bytes\n", sizeof(short));
    printf("sizeof(int) = %d bytes\n", sizeof(int));
    printf("sizeof(long) = %d bytes\n", sizeof(long));
    printf("sizeof(long int) = %d bytes\n", sizeof(long int));
    printf("sizeof(long long) = %d bytes\n", sizeof(long long));

    printf("sizeof(float) = %d bytes\n", sizeof(float));
    printf("sizeof(double) = %d bytes\n", sizeof(double));
    printf("sizeof(long double) = %d bytes\n", sizeof(long double));
    
    printf("sizeof(bool) = %d bytes\n", sizeof(bool));
    printf("sizeof(wchar_t) = %d bytes\n", sizeof(wchar_t));

    int a = 0;
    printf("sizeof(pointer) = %d bytes\n", sizeof(&a));
    printf("\n");
}

在各個編譯器中運行結(jié)果:


  • vs2015 32bit:
vc_32.png

  • vs2015 64bit:
vc_64.png

  • android ndk(windows版模擬器):
android_ndk_debug.jpg

由于android ndk不支持printf輸出查近,而需要使用其log輸出漩怎,因此修改一下代碼,以斷點debug方式顯示結(jié)果嗦嗡。更好的方式應(yīng)該是抽象一個針對各個平臺接口一致的接口函數(shù)


兩塊芯片(arduino nano/esp32):

mcu.jpg
  • 16bit 芯片(arduino tool chain):
mcu_16_bit.jpg
  • 32bit 芯片(arduino tool chain):
mcu_32_bit.jpg

  • 樹莓派3B(linux arm32)
raspberrypi3b_gcc_32.jpg

ios_pds_size.jpg

type vc32 vc64 android arduino nano esp32 樹莓派 ios
char 1 1 1 1 1 1 1
short 2 2 2 2 2 2 2
int 4 4 4 2 4 4 4
long 4 4 4 4 4 4 8
long int 4 4 4 4 4 4 8
long long 8 8 8 8 8 8 8
float 4 4 4 4 4 4 4
double 8 8 8 4 8 8 8
long double 8 8 8 4 8 8 16
bool 1 1 1 1 1 1 1
wchar_t 2 2 4 2 2 4 4
指針 4 8 4 2 4 4 8

結(jié)論:

1. 從指針的字節(jié)數(shù)可以知道當(dāng)前平臺是8/16/32/64位
2. android 模擬機上運行的是32位apk勋锤,真機上應(yīng)該是64位的吧?
3. wchart_t在utf8表示的機器上都是占用4個byte,只有windows才是2byte,至于mcu就略過:本來就1-2k內(nèi)存侥祭,還能指望unicode?
4. 除了指針字節(jié)數(shù)與32/64位機相關(guān)之外叁执,其他數(shù)據(jù)類型在32/64位字節(jié)數(shù)基本是一致的,有區(qū)別的是編譯器矮冬。例如ios clang/llvm long是8字節(jié)谈宛,其他都是4字節(jié)

綜上所述: 如果想編寫跨平臺的c/c++代碼,你第一步就需要了解數(shù)據(jù)類型胎署,然后定義各個平臺的編譯宏吆录,根據(jù)編譯宏typedef 各種數(shù)據(jù)類型,從而達到一致性G砟痢;煮荨!


3. 什么是交叉編譯:

簡單地說巨坊,就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼

例如: 我在windows上編譯出了android(arm)/嵌入式(兩塊小芯片)的可執(zhí)行代碼撬槽。這就是交叉編譯。


4.一些說明:

之所以取名閑聊趾撵,就是空閑的時候隨便聊聊侄柔,想到什么就寫什么。

內(nèi)容主要涉及c/c++:

  • 跨平臺編程
  • 跨語言互調(diào)
  • 常用庫編譯

計劃:每周兩篇c/c++方面的閑聊

忍不住吐槽一下占调,好久沒用android了暂题,順便從as2.2升級到2.3,想不到花了很久時間究珊,占了好多個g的硬盤薪者,好漫長的等待!(晚上更新苦银,時間太長啸胧,睡一覺發(fā)現(xiàn)終于好了)(

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赶站,一起剝皮案震驚了整個濱河市幔虏,隨后出現(xiàn)的幾起案子纺念,更是在濱河造成了極大的恐慌,老刑警劉巖想括,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陷谱,死亡現(xiàn)場離奇詭異,居然都是意外死亡瑟蜈,警方通過查閱死者的電腦和手機烟逊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铺根,“玉大人宪躯,你說我怎么就攤上這事∥挥兀” “怎么了访雪?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掂林。 經(jīng)常有香客問我臣缀,道長,這世上最難降的妖魔是什么泻帮? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任精置,我火速辦了婚禮,結(jié)果婚禮上锣杂,老公的妹妹穿的比我還像新娘脂倦。我一直安慰自己,他們只是感情好元莫,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布狼讨。 她就那樣靜靜地躺著,像睡著了一般柒竞。 火紅的嫁衣襯著肌膚如雪政供。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天朽基,我揣著相機與錄音布隔,去河邊找鬼。 笑死稼虎,一個胖子當(dāng)著我的面吹牛衅檀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霎俩,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼哀军,長吁一口氣:“原來是場噩夢啊……” “哼沉眶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杉适,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤谎倔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猿推,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體片习,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年蹬叭,在試婚紗的時候發(fā)現(xiàn)自己被綠了藕咏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡秽五,死狀恐怖孽查,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坦喘,我是刑警寧澤盲再,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站起宽,受9級特大地震影響洲胖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坯沪,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一绿映、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腐晾,春花似錦叉弦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巨柒,卻和暖如春樱拴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洋满。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工晶乔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牺勾。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓正罢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驻民。 傳聞我的和親對象是個殘疾皇子翻具,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容