一、內存對齊
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網(wǎng)站建設、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的霍山網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
(一)、為什么會有內存對齊?
1、為了提高程序的性能,數(shù)據(jù)結構(尤其是棧)應該盡可能的在自然邊界上對齊。原因是為了訪問未對齊的內存,處理器需要進行兩次訪問,而訪問對齊的內存,只需要一次就夠了。這種方式稱作“以空間換時間”在很多對時間復雜度有要求問題中,會采用這種方法。
由此我們可以明白位段的優(yōu)點,本來定義了5個成員,需要5個存儲單位,但是使用位段后只需要4個存儲空間就足夠了。
3、優(yōu)點:
但它的成員是一個或多個位的字段,這些不同長度的字段實際上是存儲于一個或多個×××變量中,他的優(yōu)點是能夠以較少的內存單元存儲數(shù)據(jù)。位段可以用×××形式輸出。
例2:
struct tagAAA
{
unsigned int a : 1;
unsigned int : 2; //沒有聲明變量,但是卻指定位段大小,稱為占位。
unsigned int c : 6;
unsigned int d : 4;
unsigned int e; //沒有指定位段大小,默認為自身類型的大小
}AAA_S;
(七)、聯(lián)合
1、聯(lián)合的聲明:
typedefunionA
{
inti;
charc;
}A;
2、聯(lián)合的特點:
聯(lián)合成員之間共用同一塊空間。聯(lián)合的大小等于成員中所占內存最大變量大小??梢杂脕頊y大小端。
(八)、枚舉:
1、聲明:
typedefenumA
{
zero,
one,
two
}A;
如果沒有對枚舉成員進行初始化時,則默認枚舉成員從0開始依次遞增
注意:
1、在同一個程序中,不能不能聲明同名的枚舉類型
2、在同一個程序中,不同的枚舉類型的枚舉成員不能同名。
3、任何枚舉的大小都是4
2、枚舉與#define 標識符之間區(qū)別:
1、#define 標識符在預編譯期間進行簡單替換。枚舉類型在編譯的時候確定其值。
2、枚舉常量可以調試,#define 標識符不可以。
3、枚舉一次可以定義大量的枚舉量。