Рассмотрим следующую программу:SizeOf оператора и выравнивание в C++ против D
#include <iostream>
class T {
char c;
int i;
};
int main() {
std::cout<<sizeof(T)<<'\n';
}
Это дает выход 8
как ожидается, из-за выравнивания. Компилятор C++ добавляет пробел в 3 байта. Но если я делаю то же самое на языке D, это дает мне совершенно неожиданный результат. (См видеодемонстрацию here.)
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)
это 4? Я ожидал получить 8
как результат размера класса.Как D-компилятор выполняет выравнивание здесь? Я что-то неправильно понимаю? Я использую Windows 7 32-разрядную ОС & Компилятор Dmd.
так 'sizeof' оператор дает всегда 4, как выход, так как классы ссылочного типа. Правильно ? – Destructor
Да, и, если быть более точным, 'sizeof' всегда дает 4 при настройке 32-разрядных архитектур. При компиляции для 64-битного 'sizeof' ссылки на класс будет 8. –
Хорошо, мне нужно подождать 6 минут, чтобы принять этот правильный ответ !!! – Destructor