C:哪个更好?malloc结构指针数组或结构数组?

gng*_*zrd 5 c memory malloc

我一直对此感到好奇,当使用数组内部的结构时,就内存分配而言,为数组中的每个条目分配新结构是否更好,或者更好地分配足够的空间在N个结构的数组中.

//pointer based:
struct myStructure ** tmp = malloc(sizeof(struct myStructure *) * N);
tmp[0] = malloc(sizeof(struct myStructure));
tmp[0]->whatever = true;

//or structure in the array:
struct myStructure * tmp = malloc(sizeof(struct myStructure) * N);
tmp[0].whatever = true
Run Code Online (Sandbox Code Playgroud)

是否有任何好处超过一个或另一个?我觉得使用第二种形式是更好的练习,因为你最终会减少较小的malloc调用,但可能会出现只能使用第一种方法的情况.

对此有何见解?

谢谢!

Mat*_*lia 5

一般来说,我会使用第二种方式,因为,如果你使用所有的插槽,它:

  • 它使用的内存略少(指针大小的N倍);
  • 碎片少了堆;
  • 避免N次调用malloc/ free(=>分配/解除分配更快更简单);
  • 在访问每个结构时避免双重间接(非常小的改进).

另一方面,如果您不打算使用阵列的所有插槽(但是您必须能够struct按需存储多个插槽),第一种方式可能很方便而且您struct的非常大,因此节省内存是值得的努力.此外,如果你需要struct廉价地更改你的顺序,可能是值得的(尽管你也可以使用第二种方法,通过使用一个独立的指针数组).