struct 位元組對齊詳解與大小端模式
http://wxxweb.blog.163.com/blog/static/135126900201022133740759/
大端模式與小端模式一、概念及詳解
在各種體系的計算機中通常採用的位元組儲存機制主要有兩種: big-endian和little-endian,即大端模式和小端模式。
先回顧兩個關鍵詞,MSB和LSB:
MSB:Most Significant Bit ——- 最高有效位
LSB:Least Significant Bit ——- 最低有效位
大端模式(big-edian) big-endian:MSB存放在最低端的地址上。
舉例,雙位元組數0×1234以big-endian的方式存在起始地址0×00002000中:
| data |<– address
| 0×12 |<– 0×00002000
| 0×34 |<– 0×00002001
在Big-Endian中,對於bit序列中的序號編排方式如下(以雙位元組數0×8B8A為例):
bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15
——MSB———————————-LSB
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+——————————————–+
= 0×8 B 8 A
小端模式(little-endian) little-endian:LSB存放在最低端的地址上。
舉例,雙位元組數0×1234以little-endian的方式存在起始地址0×00002000中:
| data |<– address
| 0×34 |<– 0×00002000
| 0×12 |<– 0×00002001
在Little-Endian中,對於bit序列中的序號編排和Big-Endian剛好相反,其方式如下(以雙位元組數0×8B8A為例):
bit | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
——MSB———————————–LSB
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+———————————————+
= 0×8 B 8 A
二、陣列在大端小端情況下的儲存:
以unsigned int value = 0×12345678為例,分別看看在兩種位元組序下其儲存情況,我們可以用unsigned char buf[4]來表示value: Big-Endian: 低地址存放高位,如下:
高地址
—————
buf[3] (0×78) — 低位
buf[2] (0×56)
buf[1] (0×34)
buf[0] (0×12) — 高位
—————
低地址
Little-Endian: 低地址存放低位,如下:
高地址
—————
buf[3] (0×12) — 高位
buf[2] (0×34)
buf[1] (0×56)
buf[0] (0×78) — 低位
————–
低地址
轉自:http://blog.163.com/[email protected]/blog/static/49955027201161210511469/相關推薦
struct 位元組對齊詳解與大小端模式
http://wxxweb.blog.163.com/blog/static/135126900201022133740759/ 大端模式與小端模式一、概念及詳解 在各種體系的計算機中通常採用的位元組儲存機制主要有兩種: big-endian和little-endian,即大端模式和小端模式。
struct 位元組對齊詳解
一.什麼是位元組對齊,為什麼要對齊? 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的一個接一個的排放,這就是對齊。
C/C++ 結構體位元組對齊詳解
結構體的sizeof 先看一個結構體: struct S1 { char c; int i; }; 12345 structS1{charc;in
pragma pack位元組對齊詳解
強調一點: #pragma pack(4) typedef struct { char buf[3]; word a; }kk; #pragma pack()
C/C++結構體位元組對齊詳解
前提:為了訪問速度和效率,需要各種型別資料按照一定的規則在空間上排列; 不是所有的硬體平臺都能訪問任意地址上的任意資料的;某些硬體平臺只能在某些地址處取 某些特定型別的資料,否則丟擲硬體異常。 為了訪問未對⻬的記憶體,處理器需要作兩次記憶體訪問;⽽對⻬的記憶體訪問僅需要
位元組對齊詳解
一.什麼是位元組對齊,為什麼要對齊? 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的一
Thinking In Linux C/C++位元組對齊詳解
一.什麼是位元組對齊,為什麼要對齊? 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的一個接一
位元組對齊詳解-----(二)ARM下的對齊處理
ARM下的對齊處理 from DUI0067D_ADS1_2_CompLib 3.13 type qul
C語言位元組對齊詳解
一、什麼是對齊,以及為什麼要對齊: 1. 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體地址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的一個接一個的排
3.c語音結構體成員內存對齊詳解
定義 pre 形狀 sed 兩個 分配 我們 替代 images 一.關鍵一點 最關鍵的一點:結構體在內存中是一個矩形,而不是一個不規則形狀 二.編程實戰 1 #include <stdlib.h> 2 #inc
初夏小談:結構體記憶體對齊詳解
記憶體對齊?什麼是記憶體對齊? 對於這個問題我們先來看看這樣的一個結構體(在32位系統下) typedef struct Stu1 { char C1; int num1; short S1; }Stu1; 如果我們不知道記憶體對齊或者不清楚記憶體對齊時,我們可能這樣分析
struct位元組對齊問題
// StructSize.cpp : 定義控制檯應用程式的入口點。 // // ConsoleApplication1.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> using namespace std;
C/C++中的struct位元組對齊問題
位元組對齊問題在面試筆試中經常碰到,自己也在這裡經常碰到坑,今天索性把這方面搞清楚,記錄自己這方面的學習過程。 大端小端法 機器的大端小端問題一直是一個常考的點,並且struct的記憶體佈局問題和這個大端小端有很大關係,這裡先看下機器的大端小端問題:
結構體對齊詳解
閱讀說明 1、在文中要注意#pragma pack()函式的使用 2、本文中博主用於演示的是linux32位系統 3、如果有不同意見可以在下面評論區一起討論(windows下的我不是很清楚,聽說例二windows下的那個分析有問題,1B+8B=13B,閱讀
C/C++記憶體對齊詳解
1、什麼是記憶體對齊 還是用一個例子帶出這個問題,看下面的小程式,理論上,32位系統下,int佔4byte,char佔一個byte,那麼將它們放到一個結構體中應該佔4+1=5byte;但是實際上,通過執行程式得到的結果是8 byte,這就是記憶體對齊所導致的。 //32位系統 #include<st
詳解結構體、類等記憶體位元組對齊
先說個題外話:早些年我學C程式設計時,寫過一段解釋硬碟MBR分割槽表的程式碼,對著磁碟編輯器怎麼看,怎麼對,可一執行,結果就錯了。當時除錯也不太會,又根本沒聽過結構體對齊這一說,所以,問題解決不了,好幾天都十分糾結。後來萬般無奈請教一個朋友,才獲悉可能是結構體對齊的事,一查、一改,果真如此。 &
C語言位元組對齊問題詳解
部落格園 首頁 新隨筆 聯絡 管理 訂閱 隨筆- 80 文章- 0 評論- 125 引言 考慮下面的結構體定義: 1 typedef struct{ 2 char c1; 3 short s; 4
結構體4位元組對齊規則的詳解
一 四位元組對齊的規則 C++中結構體變數的儲存為什麼有個4位元組對齊的規則,這裡是假設32位機器上,CPU在讀取記憶體資料的時候4位元組對齊會取得更快的速度;這是因為:1位元組8位,4位元組正好32位,而32位機器的暫存器,地址什麼的都是32位的,正好一次處理就完成。
c++記憶體中位元組對齊問題詳解
struct MyStruct { double dda1; char dda; int type }; 對結構MyStruct採用sizeof會出現什麼結果呢?sizeof(MyStruct)為多少呢?也許你會這樣求: sizeof(MyStruct)=sizeof(double)+sizeo
C++ 位元組對齊分析,struct成員指定位大小
閱讀C++ Concurrency In Action 第5章遇到這個問題,記錄下來,方便以後回頭看 主要涉及 位域和位元組對齊問題,位域一般不常見,屬於C/C++高階特性 位域指的是針對struct成員指定位大小,位域的作用主要是節省記憶體資源,使資料結構更緊湊 原