[英]sizeof operator & alignment in C++ vs D
考慮以下計划:
#include <iostream>
class T {
char c;
int i;
};
int main() {
std::cout<<sizeof(T)<<'\n';
}
由於對齊,它將輸出8
作為預期。 C ++編譯器添加3個字節的填充。 但如果我用D語言做同樣的事情,它會給我完全意想不到的輸出。 ( 在這里查看現場演示。)
import std.stdio;
class T {
char c;
int i;
}
int main() {
writefln("sizeof T is %d",T.sizeof);
writefln("sizeof char is %d",char.sizeof);
writefln("sizeof int is %d",int.sizeof);
return 0;
}
我得到的輸出是:
sizeof T is 4
sizeof char is 1
sizeof int is 4
sizeof(T)
是多少? 我期望得到8
作為班級規模的輸出。 D編譯器如何在這里執行對齊? 我錯了什么嗎? 我正在使用Windows 7 32位OS和Dmd編譯器。
D中的類是引用類型(即它們的工作方式類似於Java或C#)。 當你聲明一個T
類型的變量(其中T
是一個類)時,你只是聲明一個類引用(默認情況下為null
),它將指向實際類的數據( char c
和int i
在你的例)。 因此, T.sizeof
僅測量引用的大小,該大小將等於指針大小(4的結果僅表示您的目標是32位平台)。
嘗試將T
聲明為struct
:
import std.stdio;
struct T {
char c;
int i;
}
int main() {
writefln("sizeof T is %d",T.sizeof);
writefln("sizeof char is %d",char.sizeof);
writefln("sizeof int is %d",int.sizeof);
return 0;
}
在我的機器上,上面的輸出:
sizeof T is 8
sizeof char is 1
sizeof int is 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.