我认为所有的malloc(sizeof(structure))
都可以用这种方式替换:
char[sizeof(structure)]
那么,什么时候需要使用malloc
函数呢?
请注意,完全没有动态内存分配并非不可能(例如整个rockbox项目几乎没有使用它),但有些情况实际上需要通过使用大型静态缓冲区并编写自己的分配器来模拟它。
顺便说一下,在C++中,您永远不会使用malloc()
/free()
,而是使用运算符new
和delete
。
相关:一个案例,在其中尝试在没有malloc
的情况下工作被证明是一件大麻烦。
C++
标签,因此我从标题中删除了"C++"。 - sbinew
必须为您请求的类型提供正确对齐的内存,因此它应该能够为任何类型分配对齐的内存(如果您需要非对齐的内存,请请求一个 char
数组)。但是,使用 new
分配的内存无法重新分配。 - Matteo Italiamalloc
/任何操作系统函数在内部调用时应该处理它);出于性能原因,在特定情况下可能需要编写自己的分配器(如果您使用特定模式的内存等),但通常情况下malloc
就足够了。 - Matteo Italia我理解您的想法。您可能认为可以始终使用声明性语法来处理这些问题,甚至使用变量来声明内存空间的大小,但这样做会:
您可能会逐渐理解这一点,不必担心。
此外,您应该尝试了解更多关于内存模型的知识。使用动态分配和静态分配时,不使用相同的内存空间。
对于初学者,请访问以下网站获取有关指针的详细信息:
友情建议:我不知道您是在*NIX还是Windows上开发C,但无论如何,如果您使用gcc,我建议在自学时使用以下编译标志:
-Wall -ansi -pedantic -Wstrict-prototypes
我建议您了解动态内存分配。显然您对它并不熟悉。
二者的主要区别在于,使用malloc()
分配的内存会一直存在,直到您结束它。而静态内存,例如char buff[10];
则只存在于函数作用域中。
char buff[10]
,它具有自动存储期而不是静态存储期。 - Van Trmalloc是一种动态内存分配器,它可以帮助您根据需要为变量分配内存,从而减少内存损失。它还受realloc()函数的支持,通过该函数,您可以编辑先前通过malloc()或calloc()定义的所需内存。因此,简而言之,我们可以说malloc()可用于管理内存空间并利用必要的内存而不浪费它。
structure A = { /* initialize correctly */ };
将一个(基本上)未类型化的char
数组这样做是没有意义或者没有点的。如果您还需要该兽的地址,那么使用&A
获取地址。
malloc
为其创建一个节点,并将其存储在链接列表中。如果你使用char[sizeof(structure)]
而不是malloc
,那么我认为就不会进行动态内存分配。
char[]
方法无法在运行时调整大小或确定大小外,你的数组可能不适合你要使用它的结构类型。这可能导致未定义的行为。malloc(sizeof())
(从内存对齐的角度来看,这与堆栈上的缓冲区相同。-1)。 - nothrowstruct
自身的对齐要求。 - schot
malloc()
。由于您的问题没有C++
标签,我将从标题中删除"C++"。 - sbi