我正在学习C语言。我知道malloc()
函数分配的字节块在用户请求之外不能被更改或破坏,但我发现自己经常使用它。确切地说,每当我想创建一个结构体或其任何内容以便将来引用时,我都会使用malloc。我也知道在使用完毕后需要free()
已分配的内存。
我的malloc使用是否正确?
malloc
及其相关函数)有两个原因:
ssize_t read(int fd, void *buf, size_t count);
int foo;
static int foo;
块之外的内容相同,但仅在实际模块中可见。
int foo;
static int foo;
块内的内容只在该块中可见,但它会保留其值直到整个进程结束。
我正在进行大量的嵌入式C编码,并且绝对禁止使用malloc()。但这是完全可能的。通常情况下,如果您在编译时不知道问题的大小,则需要malloc()。但即使在某些情况下,您也可以使用其他技术(如递归,基于行的处理等)替换动态内存分配。
这取决于您所说的是什么
不能在没有用户请求的情况下更改或损坏
如果您指的是代码-通常称为客户端,而不是用户。但仍然不清楚您的意思。但这不是重点。
重点是malloc()
是用于动态内存分配的函数之一。这意味着您可以将此函数返回的地址传递到其他地方,并且存储在那里的数据将一直存在,直到手动释放为止。与静态内存分配不同,后者在超出范围时会自动释放。
因此,如果由malloc()
分配的内存在同一范围内被释放,您可能不应该使用它,因为这是无意义的,并且静态分配速度更快,因为CPU更容易缓存并且在程序启动时初始化,而不是在运行时像堆分配的内存。
malloc()
和free()
,那么你应该考虑摆脱它们并静态分配结构体/数组/其他内容。 - user529758