下面这句话到底是什么意思?
void *malloc(size_t size);
int *p=(int*)malloc(23);
这是否意味着操作系统为int分配了23字节的内存(尽管它只需要4字节)?我知道为了使 malloc 平台独立,我们使用 sizeof,但是如果我们使用上面的语法呢?
此外,即使按照上面的方式编写了 malloc,当我输入 printf("%d",sizeof(*p))
时,我得到的答案是 4。为什么?它不应该返回 23 因为这是我分配的内存吗?
最佳答案
当您调用 malloc(23)
时,它将返回至少 23 个字节(可能更多)。
您如何使用该空间完全取决于您。您想在其中放入 int
吗?那是你的事,但你浪费了 19 个字节。你想在那里放一个 22 字节的字符串吗?很好。
sizeof
测量您给它的 TYPE 的大小。它不知道后面可能分配多少内存。因此,当您调用 sizeof(*p)
时,它会看到 *p
的类型为 int
,并且大小为 int
是 4,所以结果是 4。
没有可移植的、广泛接受的方法来了解已分配给指针的内存量。
关于c - void *malloc(size_t size);中malloc的精确操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43345509/