如題,看下面的示例代碼:
#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++對象內存模型的一個敲門磚,我自己覺得是挺有趣的~