【发布时间】:2014-05-08 05:59:08
【问题描述】:
我有一个用 C 语言编写的特定应用程序,需要提高内存效率。它正在收集统计信息,因此我需要能够在运行时“打开/关闭”某些字段以最小化内存消耗。 我知道您可以使用宏定义条件结构字段,但如果我没记错的话,那是编译时,有没有可能的方法在 C 中在运行时执行此操作?
例子:
输入:
collect (A,B)
会产生这样的结构:
struct statistics{
double A;
double B;
};
但输入:
collect (A,B,C)
会产生这样的结构:
struct statistics{
double A;
double B;
double C;
};
【问题讨论】:
-
您需要使用某种动态分配和结构。
-
在这种情况下,最好为每条记录使用动态大小的数组而不是结构(假设所有字段都是相同的类型,即
double?)。或者,您可以从 AoS 切换到 SoA,其中每个数组都是一个指针,并且仅在需要时分配。 -
对,(它们不都是双精度,主要是双精度和整数);然而,一个指针本身是 4 字节,所以我将有一个指针,而不是所有这些字段中的每一个,它可能会或可能不会被分配——但在内存中的顺序仍然大致相同。有没有可能做得比这更好?
-
我已经将我上面的后一个建议充实到下面的更完整的答案中......
标签: c memory-management struct runtime conditional