日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大端和小端,字节对齐

發布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大端和小端,字节对齐 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1)Little-Endian就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。
2)Big-Endian就是高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。

16bit寬的數0x1234在Little-endian模式(以及Big-endian模式)CPU內存中的存放方式(假設從地址0x4000開始存放)為:
內存地址小端模式存放內容大端模式存放內容
0x40000x340x12
0x40010x120x34

判斷大小端的C語言程序

inti=1;
char*p=(char*)&i;
if(*p==1)
printf("LittleEndian");
else
printf("BigEndian");

需要字節對齊的根本原因在于CPU訪問數據的效率問題,系統一次訪問0-3,3-7,等地址上的數據,若一個int型數據存儲在2,3,4,5地址上,則需要訪問內存兩次,如果存在0,1,2,3地址上,則只需訪問一次內存。

1、對于一個類型的數據,它存放的起始地址只要是它的類型的大小的整數倍就行了。若inta,則a只要存放在地址0,4,8,12.。。。。等地址上即可(int為4字節)。若charb,則存放在0,1,2,3,4,5,。。。任意一個地址開始的就行。若shortb,則存放在0,2,4,6,8。。。等地址上。

float為4字節,double為8字節。其實對齊問題是考慮在結構體中的,單獨定義一個變量或數組好像考慮這個意義不大。

2、結構體是按其定義的數據類型的最大的那個對齊的。

structtest
{
charx1;
charx4;
shortx2;

charx5;

};

運行后的結果sizeof(test)=6;而不是5。

0:x11:x42-3:x24:x5

地址0存儲x1地址1存儲x4地址2、3存儲x2地址4存儲x5

主要是考慮到結構體數組的問題。結構體的大小必須是其中最大變量占用空間的整數倍。

structtest
{
charx1:2;
charx4:6;

charx2:7;
charx5:4;

};

sizeof(test)=3;

若修改為

structtest
{
charx1:2;
charx4:7;

charx2:7;
charx5:4;

};

sizeof(test)=4;

只要保證同一個字符變量在一個字節上即可

轉載于:https://blog.51cto.com/lihaichuan/1304010

總結

以上是生活随笔為你收集整理的大端和小端,字节对齐的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。