我正在尝试编写一个需要不同数据类型的多个数组的代码。这些数组需要动态分配。我需要考虑性能,因此我想通过一次 malloc
调用来分配所有数组。
对于简单的情况,假设我需要一个整数和一个 double float 组。因此,我正在执行以下操作。
int *iA;
double *dA;
void *vp;
vp = malloc( (sizeof(int)+sizeof(double))*N ); // assume N is known at this point.
// now to set the array pointers I am doing the following.
iA = vp;
dA = (void*)(iA+N); // This is wrong!!
...
free(vp);
如果 vp 中的地址是 8 的倍数(通常是)并且 N 是奇数,则 dA 将设置为不是 8 的倍数的地址。这会导致各种问题。如果我交换 iA 和 dA 分配应该没问题。这似乎是一个简单的解决方案,但如果我有两个以上的数组和两个以上不同的类型,它可能无法解决问题。我不确定。
所以,我的问题是,如果您需要不同数据类型的多个数组,分配内存的最佳方法是什么(就性能而言)?
注意:我在 64 位 Linux 机器上,使用 gcc-4.9.0 编译代码。
最佳答案
what is the best way (in terms of performance) to allocate memory if you need multiple array of different data types?
如果您需要大量内存,多次调用 malloc 的开销很可能可以忽略不计,并且尝试手动优化调用很可能只是不成熟的优化。
<如果您不需要大量内存,请使用 VLA。这些通常在堆栈上分配(编译器通过调用 alloca 或类似的方法来实现它们),因此它们比动态分配更快、更安全。例如:
void local_function (size_t d_arr_n, size_t i_arr_n, ...) { double double_arr [d_arr_n]; int int_arr [i_arr_n]; ... }
关于c - 多个数据类型的单个 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882994/