大多数使用C中结构的示例使用malloc
将所需的内存大小块分配给指向该结构的指针。但是,将具有基本类型的变量(int
,char
等)分配给堆栈,并假定将有足够的内存可用。
我理解这背后的想法是,内存可能无法用于较大的结构,因此我们使用malloc
来确保我们确实有足够的内存,但是对于我们的结构很小,这真的是必要的吗?例如,如果一个结构仅由三个int组成,那么我总是可以假设有足够的内存?
所以我的问题确实归结为C中关于何时需要malloc
变量的最佳实践,什么是理由?
您唯一不必分配内存的时间是当您静态分配内存时,这就是当您拥有类似语句的情况时发生的情况:
int number = 5;
您可以随时将其写为:
int *pNumber = malloc(sizeof(int));
,但是您必须确保释放它,否则您将泄漏内存。
您可以使用一个结构(而不是动态分配内存,静态分配):
struct some_struct_t myStruct;
和访问成员:
myStruct.member1 = 0;
etc...
动态分配和静态之间的最大差异是该数据是否在当前范围之外可用。通过静态分配,事实并非如此。它是动态的,但是您必须确保释放它。
遇到麻烦的地方是您必须从函数返回结构(或指针)。您要么必须在返回它的函数中动态分配,要么必须将指针传递给外部(动态或静态)分配的结构,然后该函数可以与。
良好的代码被重复使用。好的代码几乎没有尺寸限制。编写好代码。
只要有琐事的缓冲尺寸,请使用malloc()
。
-
缓冲区大小编写
int
:所需的缓冲区大小最多是sizeof(int)*CHAR_BIT/3 + 3
。使用固定的缓冲区。 -
缓冲区大小如
sprintf(buf, "%f",...
中的double
:所需的缓冲区大小可能是数千个字节:使用malloc()
。或使用sprintf(buf, "%e",...
并使用固定的缓冲区。 -
形成文件路径名可能涉及数千个
char
。使用malloc()
。