c - void *malloc(size_t size);中malloc的精确操作

标签 c dynamic-memory-allocation

下面这句话到底是什么意思?

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/

相关文章:

c - 我调用这个函数错了吗?

c - 内存分配和进程内存使用

c - 使用指针为 C 中的 3D 数组分配内存?

c++ - MPI 中的动态内存分配

c++ - 动态二维数组 - 缺少段错误?

c - 我应该将指针更改为数组吗?

c - 一个函数产生一个无限循环

c - 使用gnu-efi读取文件

c - 使用 lib 时无法解析符号...有什么想法吗?

c - 与 Windows 相比,为什么 Screen 在 Linux 中没有消失?