c - 32 位机器上的 Malloc 和大小

标签 c memory allocation

#include<stdio.h>
#include<stdlib.h>

int main()
    {
        int *p;
        p = (int *)malloc(20);
        printf("%d\n", sizeof(p));
        free(p);
        return 0;
    }

在我的 64 位机器上,4 被打印为 p 的大小。我假设这是因为整数在内存中占用 4 个字节,而 p 是一个整数指针。如果我运行的是 32 位机器怎么办?另外,如果我更换会发生什么 int *p 与 double *p 和 (int *)malloc(20) 与 (double *)malloc(20)?

最佳答案

你的假设是错误的。 在 printf("%d\n", sizeof(p)); 中,您没有打印 integer 的大小。您在此处打印 sizeof '指向整数的指针',其中在你的情况下是 4 个字节。很可能你会在 32 位机器上得到相同的结果。

现在关于malloc,它分配字节的数量并返回指向它的指针。因此,即使您从转换指针,也会分配相同大小的内存int*double*

关于c - 32 位机器上的 Malloc 和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28599706/

相关文章:

c - malloc 不适用于 double 类型数组

c - 选择结构体元素有快捷方式吗?

python - 清除通过在 IPython 中绘图分配的内存

c++ - 有没有办法在不调用元素构造函数的情况下为 std::vector 分配内存?

c - 从 void ** 转换为 char ** 有多危险

c - sscanf 复制的数据超过可变大小

python - 如何测量给定时刻的进程内存使用情况

php - 在一台专用服务器 ubuntu 上运行多个 nginx

c++ - 带有指针数组的 HDF5 结构

java - 实例化泛型类的 JAVA 数组