筆試知識點:c++中sizeof(空類)= 1

如題,看下面的示例代碼:

#include <stdio.h>

class X {
};

int main() {
    X a, b;
    printf("sizeof(X) = %ld\na: %ld\nb: %ld\n",
     sizeof(X), &a, &b);
    return 0;
}

打印結果是:

sizeof(X) = 1
a: 140729295724230
b: 140729295724231

可以看到,sizeof(X)居然不是0,而是1!!!

爲什麼呢?

之前看過幾篇博客,都說是爲了讓對象能夠有唯一的地址以區別不同的對象,我就懵了,什麼意思呢?

直到今天看了《深度探索C++對象模型》這本書,我才恍然大悟,自己敲了上面那幾行代碼試了一下,果然!

這一個字節用來幹什麼的呢?裏面的值是多少無所謂,因爲這個字節只是用來佔位置而已,正如上面打印的ab的地址一樣,它們各自佔用一個byte的內存,緊挨着。我們可以通過地址的不同來區別它們。

其實這個問題本身沒什麼意義,只是探究C++對象內存模型的一個敲門磚,我自己覺得是挺有趣的~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章