考虑下面的三个代码块,字符串/联合冲突的三个替代解决方案。
一般来说,在这些选项中,以这种方式使用联合的内存效率更高?
我在这里寻找解决原则的答案:也就是说,联合的主要目的是节省内存。
编辑:课堂作业迫使我以这种方式使用工会。它让我思考哪个是最有效的,这就是我到达这里的方式。
代码块 (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;
}
};
(注意:代码背后的想法是任何员工都是小时工或薪水,因此这里是工会。请不要为这个问题提出不涉及工会的替代解决方案。我不担心解决特定问题,我对工会感兴趣。)
此外,指针和其他数据类型的大小似乎差异很大:
这是否意味着我们无法在这里就内存效率做出一揽子声明?如果是这样,在确定最有效的方法时我们应该考虑哪些因素?