c語言大小端(數(shù)據(jù)在內(nèi)存中的存儲(chǔ))
大小端模式介紹
- 大端(存儲(chǔ))模式:是指一個(gè)數(shù)據(jù)的低位字節(jié)序的內(nèi)容放在高地址處,高位字節(jié)序存的內(nèi)容放在低地址處。
- 小端(存儲(chǔ))模式:是指一個(gè)數(shù)據(jù)的低位字節(jié)序內(nèi)容存放在低地址處,高位字節(jié)序的內(nèi)容存放在高地址處。(可以總結(jié)為“小小小”即低位、低地址、小端)
在計(jì)算機(jī)系統(tǒng)中,我們是以字節(jié)為單位存放數(shù)據(jù)的,每個(gè)地址單元都對(duì)應(yīng)著一個(gè)字節(jié),一個(gè)字節(jié)為8bit。但在C語言中存在不同的數(shù)據(jù)類型,占用的字節(jié)數(shù)也各不相同,那么就存在怎樣存放多個(gè)字節(jié)的問題,因此就出現(xiàn)了大端存儲(chǔ)模式和小端存儲(chǔ)模式。
我們可以創(chuàng)建一個(gè)整型變量i,在調(diào)試時(shí),打開調(diào)試>>窗口>>內(nèi)存,輸入&i,就可以在內(nèi)存窗口中看到變量i在內(nèi)存中是如何存儲(chǔ)的了。

從圖可以看出整型變量i在內(nèi)存中是其字節(jié)序低位的內(nèi)容存放在低地址,字節(jié)序高位的內(nèi)容存放在高地址,所以這臺(tái)機(jī)器是小端存儲(chǔ)模式。
由此我們可以通過觀察低地址處存放的內(nèi)容來判斷當(dāng)前機(jī)器的存儲(chǔ)模式,那么我們可以設(shè)計(jì)一個(gè)小程序來判斷當(dāng)前機(jī)器的存儲(chǔ)模式。
方法1:
#include <stdio.h>
int main()
{
int i = 1;
char *a = (char *)&i;
if(*a == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
方法2:共同體判斷
int Check_Sys()
{
union
{
int i;
char c;
}un;
un.i = 1;
return un.c;//如果是小端返回1,如果是大端返回0
}
int main()
{
if(Check_Sys())
printf("小端\n");
else
printf("大端\n");
return 0;
}
上面的共用體變量un,大小sizeof(un)=4,注意使用共用體(聯(lián)合)判斷時(shí),不能僅依靠公用類型最大者為其共用體變量大小,應(yīng)遵守對(duì)其原則和補(bǔ)齊原則。
對(duì)齊原則:結(jié)構(gòu)體變量中元素是按照定義順序一個(gè)一個(gè)放到內(nèi)存中去的,但并不是緊密排列的。從結(jié)構(gòu)體存儲(chǔ)的首地址開始,每一個(gè)元素放置到內(nèi)存中時(shí),它都會(huì)認(rèn)為內(nèi)存是以它自己的大小來劃分的,因此元素放置的位置一定會(huì)在自己寬度的整數(shù)倍上開始(以結(jié)構(gòu)體變量首地址為0計(jì)算)。
補(bǔ)齊原則:檢查計(jì)算出的存儲(chǔ)單元是否為所有元素中所占內(nèi)存最大的元素的長(zhǎng)度的整數(shù)倍,是,則結(jié)束;若不是,則補(bǔ)齊為它的整數(shù)倍。
舉一個(gè)例子:
union Un
{
int i;
char arr[5];
};sizeof(union Un)=8
到此這篇關(guān)于c語言大小端(數(shù)據(jù)在內(nèi)存中的存儲(chǔ))的文章就介紹到這了,更多相關(guān)c語言大小端內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(46.全排列)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(46.全排列),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C語言?模擬實(shí)現(xiàn)memcpy與memmove函數(shù)詳解
這篇文章主要介紹了C語言詳解如何模擬內(nèi)存函數(shù),用到了mencpy與memmove兩個(gè)函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-04-04
windows上安裝CLion教程及簡(jiǎn)單使用詳解
C語言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況
C語言模擬內(nèi)存函數(shù)分析之mencpy與memmove

