一、內(nèi)存對齊
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的霍山網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
(一)、為什么會有內(nèi)存對齊?
1、為了提高程序的性能,數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能的在自然邊界上對齊。原因是為了訪問未對齊的內(nèi)存,處理器需要進(jìn)行兩次訪問,而訪問對齊的內(nèi)存,只需要一次就夠了。這種方式稱作“以空間換時間”在很多對時間復(fù)雜度有要求問題中,會采用這種方法。
由此我們可以明白位段的優(yōu)點,本來定義了5個成員,需要5個存儲單位,但是使用位段后只需要4個存儲空間就足夠了。
3、優(yōu)點:
但它的成員是一個或多個位的字段,這些不同長度的字段實際上是存儲于一個或多個×××變量中,他的優(yōu)點是能夠以較少的內(nèi)存單元存儲數(shù)據(jù)。位段可以用×××形式輸出。
例2:
struct tagAAA
{
unsigned int a : 1;
unsigned int : 2; //沒有聲明變量,但是卻指定位段大小,稱為占位。
unsigned int c : 6;
unsigned int d : 4;
unsigned int e; //沒有指定位段大小,默認(rèn)為自身類型的大小
}AAA_S;
(七)、聯(lián)合
1、聯(lián)合的聲明:
typedefunionA
{
inti;
charc;
}A;
2、聯(lián)合的特點:
聯(lián)合成員之間共用同一塊空間。聯(lián)合的大小等于成員中所占內(nèi)存最大變量大小??梢杂脕頊y大小端。
(八)、枚舉:
1、聲明:
typedefenumA
{
zero,
one,
two
}A;
如果沒有對枚舉成員進(jìn)行初始化時,則默認(rèn)枚舉成員從0開始依次遞增
注意:
1、在同一個程序中,不能不能聲明同名的枚舉類型
2、在同一個程序中,不同的枚舉類型的枚舉成員不能同名。
3、任何枚舉的大小都是4
2、枚舉與#define 標(biāo)識符之間區(qū)別:
1、#define 標(biāo)識符在預(yù)編譯期間進(jìn)行簡單替換。枚舉類型在編譯的時候確定其值。
2、枚舉常量可以調(diào)試,#define 標(biāo)識符不可以。
3、枚舉一次可以定義大量的枚舉量。
文章名稱:內(nèi)存對齊與自定義類型
轉(zhuǎn)載來源:http://muchs.cn/article14/pisdde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、微信小程序、用戶體驗、電子商務(wù)、做網(wǎng)站、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)