比如我有这样的结构和代码:
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,所以这些方法中的任何一种是完全可以接受的,还是一种方法比另一种方法更好,为什么?
最佳答案
第二种方式更好,原因如下:
- 您只需释放一个分配,而不是两个(减少内存泄漏的可能性)。
- 您已将数组的大小编码到数据结构中,这有助于代码分析。第一个版本可以有任何大小,没有人可以说任何下标都是错误的。如果您添加一个已适当初始化为第一个结构的“大小”成员,则此论点的影响力会较小,但影响力不会小很多。
- 您可以通过结构赋值复制整个第二个结构;你不能以同样的方式复制第一个结构。
- 生成的汇编器与第一个略有不同(更长)(它必须从成员中获取地址,然后取消引用它,而不是仅仅对第二个取消引用)。
尽管如此,这两种方法在本质上是相同的。您使用(我很想说“浪费”,但这不太公平)更多的空间与第一个,但这不太可能是一个主要问题(如果是,您可能希望改变大小100,因为与修改指针与数组相比,这将为您节省更多空间。
关于c - 为结构中的变量分配内存的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769481/