以下の 3 つのコード ブロック、文字列/共用体の競合に対する 3 つの代替ソリューションを検討してください。
これらのオプションのうち、一般に、この方法での共用体の使用に関してメモリ効率が高いのはどれですか?
ここで原則に対処する答えを探しています。つまり、ユニオンの主な目的はメモリを節約することです。
編集:クラスの割り当てにより、この方法でユニオンを使用する必要がありました。どれが最も効率的かを考えさせられ、それが私がここにたどり着いた方法です。
コードブロック (A):
// unions with pointers to structs
struct HourlyInfo {
string firstName;
string lastName;
string title;
int hoursWorked;
double hourlyRate;
};
struct SalaryInfo {
string firstName;
string lastName;
string title;
double salary;
double bonus;
};
struct Employee {
bool isHourly;
union {
HourlyInfo *hourlyEmployee;
SalaryInfo *salaryEmployee;
}
};
コードブロック (B):
// applying unions to relevant and non-string data types
struct Employee {
string firstName;
string lastName;
string title;
bool isHourly;
union {
struct {
double hourlyRate;
int hoursWorked;
} hourly;
struct {
double salary;
double bonus;
} salaried;
};
};
コードブロック (C):
// use cstring instead of string
struct HourlyInfo {
cstring firstName[50];
cstring lastName[50];
string title[50];
int hoursWorked;
double hourlyRate;
};
struct SalaryInfo {
cstring firstName[50];
cstring lastName[50];
cstring title[50];
double salary;
double bonus;
};
struct Employee {
bool isHourly;
union {
HourlyInfo hourlyEmployee;
SalaryInfo salaryEmployee;
}
};
(注: コードの背後にある考え方は、どの従業員も時間給または給与のいずれかであるということです。したがって、ここでは労働組合です。労働組合が関与しないこの問題の代替解決策を提案しないでください。私は特定の問題を解決することについて心配していません。私は労働組合に興味があります。)
また、ポインターやその他のデータ型は、サイズが大きく異なるようです。
C++ 標準は、int、long 型のサイズをどのように規定していますか?
これは、ここでメモリ効率について明確に述べることができないということでしょうか? もしそうなら、最も効率的な方法を決定する際に考慮すべき要因は何ですか?