面試常客1 常見特殊結構的大小

2021-09-03 02:40:22 字數 880 閱讀 9969

結構體:

struct unknown {

int a;

char b;

int c;

long d;

char e;

printf("%lu\n", sizeof(struct unknown)); //output : 32

1、遇到第乙個成員變數a,該成員偏移量為0,大小為4,符合偏移規則第一條。

2、接下來第二個成員變數b,偏移量為4,大小為1,符合偏移規則第一條。

3、成員變數c,偏移量為5,大小為4,不符合偏移規則第一條。在成員b和c之間填充三個位元組,此時,偏移量大小為8,符合偏移規則第一條,繼續往下。

4、成員變數d,偏移量為12,大小為8,不符合偏移規則第一條,在成員c和d之間填充4個位元組,此時偏移量為16,符合偏移規則第一條,繼續往下。

5、成員變數e,偏移量為24,大小為1,符合偏移規則第一條。

6、所有成員大小計算完後,執行偏移規則第二條,最寬的型別是d,long型別,8個位元組,當前結構體計算出的大小為25,並不符合第二條規則,於是在末尾填充7個位元組,總大小為32個位元組,滿足第二條偏移規則。到此結構體大小計算結束。

union:

union共用體變數大小等於共用體結構中占用記憶體最大的成員的記憶體大小。

enum列舉:

列舉型別,指乙個被命名的整型常數的集合。即列舉型別,本質上是一組常數的集合體,只是這些常數有各自的命名。列舉型別,是一種使用者自定義資料型別。

列舉變數,由列舉型別定義的變數。列舉變數的大小,即列舉型別所佔記憶體的大小。由於列舉變數的賦值,一次只能存放列舉結構中的某個常數。所以列舉變數的大小,實質是常數所佔記憶體空間的大小(常數為int型別,當前主流的編譯器中一般是32位機器和64位機器中int型都是4個位元組),列舉型別所佔記憶體大小也是這樣。

面試 結構體大小的計算

1.什麼是記憶體對齊 舉例 typedef struct a sizeof a 24 typedef struct b sizeof b 16 分別對他們求大小,sizeof a sizeof b 我們所得到的結果是不同的,sizeof a 24而sizeof b 16為什麼會產生不一樣的結果呢?這...

面試常見問題 1 this的常見問題

this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...

空類或結構的大小為1

我以為我會寫一些關於此的文章,因為在論壇中經常會問它乙個問題。首先,這是乙個c 問題,建立沒有成員的類嚴格違反c的規則。這是有道理的,因為沒有資料成員和虛函式的結構或類的唯一真正用途是作為派生其他 類和結構的基礎,或作為非虛擬方法的容器。發生這種情況的原因歸結為正確實施該標準,c 標準說的一件事是 ...