为结构中的变量分配内存的最佳方法是什么?

时间:2011-07-20 22:49:47

标签: c arrays memory data-structures

例如,我有这个结构和代码:

typedef struct
{
long long *number;
} test;

test * test_structure;
test_structure = malloc(sizeof(test));
test_structure->number = malloc(sizeof(long long) * 100);
free(test_structure->number);
free(test_structure);

与此结构和代码:

typedef struct
{
long long number[100];
} test;

test * test_structure;
test_structure = malloc(sizeof(test));
free(test_structure);

因为我知道数字数组总是100,所以这些方法中的任何一种都是完全可以接受的,或者比其他方法更好,为什么?

3 个答案:

答案 0 :(得分:6)

第二种方式更好,原因如下:

  1. 您只需要释放一个分配,而不是两个(减少内存泄漏的可能性)。
  2. 您已在数据结构中编码了数组的大小,这有助于代码分析。第一个版本可以有任何大小,没有人可以说任何下标都是错误的。如果你添加了一个适当初始化为第一个结构的'size'成员,那么这个参数的力量就会减少,但力度不会太大。
  3. 您可以使用结构分配复制整个第二个结构;你不能以同样的方式复制第一个结构。
  4. 为第一个生成的汇编程序略有不同(更长)(它必须从成员中获取地址,然后取消引用它,而不是仅使用第二个取消引用)。
  5. 尽管如此,这两种方法基本相同。你使用(我很想说'浪费',但这不太公平)与第一个相比更多的空间,但它不太可能是一个主要问题(如果是,你可能想要改变大小100,因为这会比修补指针与数组相比节省更多空间。

答案 1 :(得分:3)

我肯定会选择后者。内存配置文件几乎相同。由于只有一个内存分配,因此需要跟踪的移动部件较少,因此几乎没有理由考虑前一种替代方案。

事实上,即使是一个长度未知的数组,我也许会选择一个裸long long *而不是一个似乎没有增加任何价值的结构包装器。

答案 2 :(得分:0)

我只使用后者,因为你说你知道数组的大小。如果没有,那么前者。

相关问题