Skip to Content
LINUX系統程式設計 第二版
book

LINUX系統程式設計 第二版

by Robert Love
December 2013
Intermediate to advanced
496 pages
8h 57m
Chinese
GoTop Information, Inc.
Content preview from LINUX系統程式設計 第二版
430
|
附錄 A
打包一個結構
packed
屬性用於提示編譯器,應該盡可能以最低限度的空間,把一個資料型別或變數打
包進記憶體,這可能會導致無法符合對齊的需求。如果此屬性指定在
struct
union
上,則其所有的變數皆會被打包進記憶體。如果只對一個變數指定此屬性,則只有特定
的物件會被打包進記憶體。
如下的定義會把結構中的所有變數打包進最低限度的記憶體空間:
struct __attribute__ ((packed)) foo { ... };
舉例來說,一個結構中包含了一個
char
後面跟著一個
int
,但是你很有可能會發現,對
齊記憶體位址的整數並未緊跟在
char
後面,例如在三個位元組之後。編譯器為了對齊變
數,在
char
int
之間插入了未使用的補白位元組。一個被打包進記憶體的結構缺少補
白位元組,因此所耗用的記憶體比較少,但是無法符合架構的對齊需求。
擴大變數的對齊邊界
除了允許變數的打包,GCC 還允許程式設計者為特定的變數指定一個最小的對齊邊界。
於是 GCC 至少會把所指定的變數對齊此值,對照於架構和 ABI 所規定之最小對齊要
求。例如,下面這道敘述以 32 bytes 的最小對齊邊界(對照於具 32-bit 整數的機器上 4
bytes 的典型對齊邊界)來宣告一個名為
beard_length
的整數。
int beard_length __attribute__ ((aligned (32))) = 0;
強行設定資料型別的對齊邊界,通常僅用於處理「對齊需求大於架構本身的」硬體,或
是當你手動混合 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

優雅的SciPy|Python科學研究的美學

優雅的SciPy|Python科學研究的美學

Juan Nunez-Iglesias, Stéfan van der Walt, Harriet Dashnow
C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普

Publisher Resources

ISBN: 9789862769812