是否可以将一次调用 malloc 分配的内存用于各种变量类型?

Could you use the memory allocated by one call of malloc for various variable types?

我目前正在学习动态使用内存,我想知道,您能否通过一次 malloc 调用分配 40 个字节,并将其中的 16 个字节用于 int 变量,其余 24 个字节用于双精度变量?我问这个是因为我知道我必须转换指针类型才能在没有警告的情况下使用 malloc。因此,如果我使用 void 指针,我可以做我提到的事情吗? 提前致谢。

... could you allocate lets say 40 bytes with one call of malloc and use like 16 of them for int variables and the rest 24 for doubles?

是的,有一些限制。

malloc() 和朋友返回的指针针对所有标准对象类型正确对齐。

诀窍:第二种类型的地址(在 OP 的情况下为 double)是否与 double 相距 16 个字节?在 OP 的情况下可能是,但如果 BYTES_FOR_INT 是 20 而不是 16 则可能不是。

一种方便的方法是使用 struct

#define BYTES_FOR_INT    16
#define BYTES_FOR_DOUBLE 24
struct {
   int i[BYTES_FOR_INT/sizeof(int)];
   double d[BYTES_FOR_DOUBLE/sizeof(double)];
} *st = malloc(sizeof *st);`
#define BYTE_TOTAL (sizeof *st)

以上可能会分配 BYTES_FOR_INT + BYTES_FOR_DOUBLE 字节以外的内容,具体取决于它们的值和类型对齐需要。

要将 BYTE_TOTAL (40) 和 BYTES_FOR_INT 的分配固定为各种值 2-32 需要更多的工作来确定 BYTES_FOR_DOUBLE。当 BYTES_FOR_INT, BYTES_FOR_DOUBLE, BYTE_TOTAL 不是 double..

大小的倍数时,需要考虑填充

i know that i have to cast the pointer type to use malloc without warnings

没有。在 C 中不需要强制转换。malloc() 返回的 void * 可以毫无问题地转换为其他对象指针类型。