问题描述
我想所有的的malloc(sizeof的(结构))
可更换这种方式:
I think all malloc(sizeof(structure))
can be replaced this way:
char[sizeof(structure)]
则当的malloc
有必要吗?
推荐答案
- 当你不知道某种您需要(例如链表元素)有多少个对象;
- 当你需要(基于未知输入例如字符串),以只在运行时已知大小的数据结构;这在某种程度上被C99引入沃拉斯的缓解,但看到下一个点:
- 当你知道在编译时它们的大小(或者可以使用沃拉斯),但它只是太大堆栈(通常为至多几MB的),并且将毫无意义做出这种事的全球(如大载体操作);
- 当你需要有一个对象,它的使用寿命是不同的东西自动变量,这是范围绑定(=>被破坏时,从声明它们的范围执行退出),可以有(例如数据必须不同的对象之间共享不同的寿命和删除时,没有人使用它了)。
请注意,这不是的完全的不可能没有动态内存分配做(例如整个Rockbox的项目工程,几乎没有它),但也有其实际需要通过效仿案例一个大的静态缓冲区,写你自己的分配器。
Notice that it isn't completely impossible to do without dynamic memory allocation (e.g. the whole rockbox project works almost without it), but there are cases in which you actually need to emulate it by using a big static buffer and writing your own allocator.
顺便说一句,在C ++中,你将永远不会使用的malloc()
/ 免费()
,但运营商新
和删除
。
By the way, in C++ you will never use malloc()
/free()
, but the operators new
and delete
.
相关:的中努力没有的malloc
工作已被证明是一个很大的混乱。
Related: a case in which trying to work without malloc
has proven to be a big mess.
这篇关于如果是必要的malloc使用C?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!