malloc函数的内存管理

1 c malloc dynamic-memory-allocation

malloc()函数形成一个内存块(例如,将20个字节类型转换为int),那么如何将其用作int类似于calloc()函数的块数组?它不应该用于int在整个20个字节(20 * 8位)中仅存储一个值吗?

Sou*_*osh 6

(例如,将20个字节类型转换为int)

不,返回的内存将作为指向的指针void,该指针是不完整的类型。

我们将返回的指针分配给某种类型的指针变量,然后可以使用该变量访问内存。

引用C11第§7.22.3章,内存管理功能

[....]如果分配成功,则返回的指针将进行适当对齐,以便可以将其分配给具有基本对齐要求的任何类型的对象的指针,然后将其用于访问此类对象或此类对象中的数组分配的空间(直到明确释放该空间)。[...]返回的指针指向分配空间的开始(最低字节地址)。[....]

由于分配的内存是连续的,因此指针算术就像数组一样工作,因为数组中也将元素放置在连续的内存中。

需要澄清的一点是,指针不是数组。

  • @VIbhor`一个单一的int变量块`-不,不是那样的。如前所述,malloc返回的内存不是基于任何类型的,它只是具有已定义大小的内存,适合于对齐以分配给任何其他类型的指针,就是这样。 (2认同)