簡體   English   中英

C ++與D中的sizeof運算符和對齊

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM