[英]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.