1. 程式人生 > >有關位元組對齊的知識彙總

有關位元組對齊的知識彙總

首先我們得明白,什麼是位元組對齊?

在訪問特定型別變數的時候經常在特定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列。

然後我們還得懂得,為什麼需要位元組對齊?

其實,位元組對齊是空間與時間的博弈,為了效率的考慮,不得不採取空間換時間的策略,利用空間佔位,造成了資料在地址上的對齊,這個時候就達到了訪問資料只需要一次讀入即可。

位元組對齊計算的四個概念

1、基本資料型別的自身對齊值:

char型別:            1位元組

short型別:           2位元組

int、float型別:    4位元組

double型別: 8位元組

2、程式的指定對齊值:

即#pragma pack(value)時的指定對齊值value

3、自定義型別的自身對齊值:

即結構體或類的成員自身對齊最大的值

4、自定義型別的有效對齊值:

自定義型別的自身對齊值和指定對齊中較小的值

掌握了這些就可以初步認識位元組對齊了。

相關推薦

有關位元組知識彙總

首先我們得明白,什麼是位元組對齊? 在訪問特定型別變數的時候經常在特定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列。 然後我們還得懂得,為什麼需要位元組對齊? 其實,位元組對齊是空間與時間的博弈,為了效率的考慮,不得不採取空間換時間的策略,利用空間佔位

關於位元組,和程式優化有關 值得一看

一.什麼是位元組對齊,為什麼要對齊    現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的一個

有關輸出

兩位小數 nbsp AR print [] strong ron turn GC 有關輸出對齊 int main(int argc, char* argv[]){ char insertTime[20] = {"1234567890"}; double insertTime

C/C++位元組問題總結

         原文連結:http://blog.csdn.net/yangtalent1206/article/details/6890624          根據以下資料,自己在兩

結構變數知識

#pragmapack(push)//儲存對齊狀態 #pragmapack(4)//設定為4位元組對齊 struct test {     char m1;     double m4;    

【C語言】位元組問題(以32位系統為例)

  1. 什麼是對齊?   現代計算機中記憶體空間都是按照位元組(byte)劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體地址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序地一個接一個地排放,這就是對齊

轉存下位元組

(1)什麼是位元組對齊   一個變數佔用 n 個位元組,則該變數的起始地址必須能夠被 n 整除,即: 每個變數的起始存放地址 % n = 0,      對

C語言 結構體位元組問題

摘選自這位大神的部落格 方法一: 結構體在記憶體中分配一塊連續的記憶體,但結構體內的變數並不一定是連續存放的,這涉及到記憶體對齊。原則1  資料成員對齊規則:結構(struct或聯合union)的資料成員,第一個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整

NDK開發armeabi下位元組問題

本人使用Android studio進行NDK開發,模擬器測試沒問題,真機測試出現bug: Fatal signal 7 (SIGBUS), code 1, fault addr 0x86a16861 in tid 18277 (Thread-3484) 原因:預設位元組對齊方式下訪問flo

詳解結構體、類等記憶體位元組

先說個題外話:早些年我學C程式設計時,寫過一段解釋硬碟MBR分割槽表的程式碼,對著磁碟編輯器怎麼看,怎麼對,可一執行,結果就錯了。當時除錯也不太會,又根本沒聽過結構體對齊這一說,所以,問題解決不了,好幾天都十分糾結。後來萬般無奈請教一個朋友,才獲悉可能是結構體對齊的事,一查、一改,果真如此。 &

結構體的位元組

在用sizeof運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自佔的空間相加,這裡涉及到記憶體位元組對齊的問題。 1) 結構體變數的首地址能夠被其最寬基本型別成員的大小所整除; 2) 結構體每個成員相對結構體首地址的偏移量都是成員大小的整數倍; 3) 結構體的總大小為結構

C 構造型別 陣列、列舉、聯合體、結構體(位段) 位元組 和 大小端儲存

列舉 .列舉:被命名的標籤常量(對事物的列出) ---型別的構造------- enum key{    UP,                             //成員<標籤常量:預設第一個為0 後一個總是前一個的值加一>    DOWN,    L

位元組的概念

一、概念         對齊跟資料在記憶體中的位置有關。如果一個變數的記憶體地址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設一個整型變數的地址為0x00000004,那它就是自然對齊的。       二、為什麼要位元組對齊    

C語言位元組問題詳解

部落格園 首頁 新隨筆 聯絡 管理 訂閱 隨筆- 80  文章- 0  評論- 125  引言      考慮下面的結構體定義: 1 typedef struct{ 2 char c1; 3 short s; 4

C語言位元組及設定編譯方式方法

  一、概念         對齊跟資料在記憶體中的位置有關。如果一個變數的記憶體地址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設一個整型變數的地址為0x00000004,那它就是自然對齊的。       二、為什麼要位元組對齊        需要位

嵌入式C語言的位元組理解(圖文)

 1.位元組對齊?            對齊跟資料在記憶體中的位置有關。如果一個變數的記憶體地址正好位於系統長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設一個整型變數的地址為0x00000004,那它就是自然對齊的。  2. 計算機為什麼要對齊?   需

C/C++ 結構體位元組詳解

結構體的sizeof 先看一個結構體: struct S1 { char c; int i; }; 12345 structS1{charc;in

c編譯器位元組指令

#pragma pack (n)             作用:C編譯器將按照n個位元組對齊。#pragma pack ()     &nb

pragma pack位元組詳解

強調一點: #pragma pack(4) typedef struct {     char buf[3];     word a; }kk; #pragma pack()

結構體與類的位元組(終極方案,簡單易懂)

先記住常用型別在32和64位的位元組 型別 32位 64位 char 1 1 int 4 4 short 2 2 float 4 4 double 8 8