C# の値の型を初めて見たとき、最初に思ったのは「なんて素晴らしい最適化だろう」ということでした。次に、「本当に新しい言語構造が必要なのだろうか?代わりに注釈を使ってそれを行うことはできないのだろうか?」ということでした。 "。
アイデアは、与えられたクラスをいつものように使用することです
class A {int i;}
class B {
A m_a;
int F(A a) {m_a = a;}
}
気まぐれに変わるA
よ
[ValueType]
class A {int i;int j;}
そして、コンパイラは自動的にクラスB
を次のように変換します
class B {
#region A
int A_i;
int A_j;
#endregion
int F(/*A param*/int i,int j) {
#region A_assign
A_i = i;
A_j = j;
#endregion
}
コンパイラがインスタンスを最適化したくない場合は、最適化する必要がないことに注意してください。どちらの方法でも機能します。
テンプレートで問題が発生する可能性があります。
int f<T>() {
T t; // how much stack should I allocate
}
しかし、現在の状況よりもはるかに悪いかどうかはわかりません。私は実際に今何が起こっているのか分かりません(とf<struct_of_100_bytes>
は別の機能f<int>
ですか?)。