【宏思微想:科技生活,技術開發】
一. 對齊目的:
1.節省空間。2.提高訪問速度。3.硬件設計的要求或者軟件算法的要求。
二. 如何更改對齊:
· 使用偽指令#pragma pack (n),C編譯器將按照n個字節對齊。
· 使用偽指令#pragma pack (),取消自定義字節對齊方式。
或者:
· __attribute((aligned (n))),讓所作用的結構成員對齊在n字節自然邊界上。如果結構中有成員的長度大於n,則按照最大成員的長度來對齊。
· __attribute__ ((packed)),取消結構在編譯過程中的優化對齊,按照實際佔用字節數進行對齊。
三.對齊原則:
1.數據類型自身的對齊值:
對於char型數據,其自身對齊值為1,對於short型為2,對於int,float,double類型,其自身對齊值為4,單位字節。
2.複雜類型(如聯合,結構體或者類)的自身對齊值:其成員中自身對齊值最大的那個值。
3.指定對齊值:#pragma pack (value)時的指定對齊值value。
4.數據成員、複雜類型(如聯合,結構體或類)的有效對齊值:自身對齊值和指定對齊值中小的那個值。
5.整個數據成員,複雜類型(如聯合,結構體或類)的對齊值:是成員中對齊值的整數倍。
四. 編程規則:
基本的原則就是把結構中的變量按照類型大小從小到大聲明,儘量減少中間的填補空間。
範例:
struct A
{
char b;
short c;
int a;
};
struct B
{
char b;
int a;
short c;
};
sizeof(strcut A) == 8
sizeof(strcut B) == 12 //根據對齊原則5,所以補齊成12B。
——————(完)——————
相關推薦
'C語言定義無參數的函數時,f()和f(void)有什麼區別?'
"相信C語言初學者常會在前輩留下的項目,或者一些開源項目中看到以 void 作為參數的函數,例如 void fun(void),雖然我們都明白在C語言中,“void”表示空,但是按理說,如果函數不需要參數,直接空著就行:void fun(),為什麼還要多此一舉的寫上 voi...
'現在這麼多編程語言可學,為什麼還要學那麼舊的C語言?有用嗎?'
"編寫操作系統最常用的編程語言就是C語言了。用C語言編寫的第一個操作系統是 Unix,之後的 GNU/Linux 等操作系統也都是使用C語言編寫的。編寫操作系統最常用的編程語言就是C語言了C語言不僅僅是操作系統語言,也是當今幾乎所有流行的高級編程語言的先驅,這些編程語言多多...
'易語言實用例程1:簡單的數據庫網絡操作(C/S架構)---上篇'
"學了十多年的易語言,現在已全面轉向.net(原因就不說了),但與易語言十多年感情是丟不掉的。作為引導我步入編程大門的啟蒙語言,我覺得是非常適合國人當做入門語言,當你學會易語言並能寫出一些功能程序後,再轉而學習其它更先進的語言,你會覺沒有想像中的那麼難,java、C#、PH...
'許多高級編程語言都借鑑了C語言的架構,或者乾脆就是C語言編寫的'
"編寫操作系統最常用的編程語言就是C語言了。用C語言編寫的第一個操作系統是 Unix,之後的 GNU/Linux 等操作系統也都是使用C語言編寫的。編寫操作系統最常用的編程語言就是C語言了C語言不僅僅是操作系統語言,也是當今幾乎所有流行的高級編程語言的先驅,這些編程語言多多...
'萬能的C語言,也能像其他語言那樣定義帶“默認參數”的函數嗎?'
"使用C++開發過程序時,定義函數可以指定默認參數,例如 void fun(int x, int y=3); 在調用 fun() 時第二個參數可以不傳遞,此時 fun() 函數默認第二個參數等於 3,例如 f(1) 就相當於 f(1,3)。這是一個很好用的特性,那麼在C語言...
'既然C語言無所不能,那麼它也能定義帶“默認參數”的函數嗎?'
"使用C++開發過程序時,定義函數可以指定默認參數,例如 void fun(int x, int y=3); 在調用 fun() 時第二個參數可以不傳遞,此時 fun() 函數默認第二個參數等於 3,例如 f(1) 就相當於 f(1,3)。這是一個很好用的特性,那麼在C語言...
'各編程語言出生簡介:C語言竟是因為無聊產生,那你心中的它呢?'
"編程語言有上千種,但是流行的不過10來種,那些我們經常使用的編程語言都是誰在什麼時候創造出來的呢?一起來看看。1880年約瑟夫·瑪麗·雅卡爾設計出人類歷史上首臺可設計織布機--雅卡爾織布機,對將來發展出其他可編程機器(例如計算機)起了重要作用。當時,他的發明受到了Skyn...
'一個資深C語言工程師:淺說C語言的重要性以及如何學好C語言'
"前言C語言屬於高級程序語言的一種,它的前身是“ALGOL”。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的侷限性,因為它只能用於UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標準化協會制定了C語言的...
推薦中...