提问人:BobDeTunis 提问时间:2/5/2023 最后编辑:BobDeTunis 更新时间:2/5/2023 访问量:126
为什么我总是听到在 C 语言中可以避免分配内存?
Why do I always hear to avoid allocating memory when I can in C?
问:
我总是被告知,只要没有内存,我就可以实现完全相同的事情,就不要分配内存。
人们之所以这么说,是因为释放代码中的内容可能需要一些时间,还是有一个面向效率的解释?(例如,更好的性能)
答:
3赞
Harith
2/5/2023
#1
因为管理内存很复杂,而且容易出现各种错误。太容易忘记某件事,或者忘记两次,或者在使用后使用某事。从堆中分配内存的成本也更高,并且有一些相当大的开销。free()
free()
free()
我总是被告知,只要我能实现 没有它完全一样的事情。
这是一个很好的建议。当您可以没有动态内存分配时,请放弃它。仅当分配的大小在编译时未知时(例如用户输入),才应从堆中分配内存。但即便如此,您也应该指定一个上限。
Смотритетакже: 为什么堆上的内存分配比堆栈上的内存分配慢得多? 和 Malloc 或普通数组定义? 和何时需要动态内存?
5赞
Steve Summit
2/5/2023
#2
作为公认的答案的对立面:
虽然避免在不需要的时候使用确实是很好的建议,但重要的是要知道如何在需要它时正确使用它——因为很多时候你确实需要它!事实上,我甚至可以说,几乎任何对数据做一些有趣的事情的程序,都会希望为这些数据动态分配内存。malloc
例如,如果你正在编写一个文本编辑器,你不会希望将你的用户限制在编写文本编辑器时静态分配的某个固定的最大文本行数——你将希望为用户在任何给定日期编辑的文本行数分配数据结构。也许只是少数,也许是一个巨大的数字。
确实,如果使用不当,会出现许多错误。但也有很多编码模式可以安全方便地使用。这些模式值得学习和使用!malloc
malloc
评论
malloc