【问题标题】:size of a pointer allocated by malloc [duplicate]malloc分配的指针的大小[重复]
【发布时间】:2013-03-11 06:03:12
【问题描述】:
char* pointer;
pointer = malloc (20000);

printf("%d", sizeof(pointer));
//output: 8

我期望输出为 20000,因为我使用 malloc 保留了 20000 个字节。 但是,它返回 8。为什么会这样?

【问题讨论】:

  • 好的,我明白你的意思了。你不需要到处去责备我问一些可能已经回答的问题。它发生了。

标签: c memory malloc


【解决方案1】:

您必须使用 64 位系统/操作系统,这就是为什么它为 printf("%d", sizeof(pointer)); 打印 8 的原因

当你声明 char *p;它将在您的内存中保留等于 sizeof(char *) 的空间。

现在如果系统是 64 位,它将保留 8 个字节,如果是 32 位,则将保留 4 个字节。

现在

char* pointer;
pointer = malloc (20000);

当您定义指针 = malloc(20000) 时,它将在内存中保留一个 20000 字节的块,其中指针指向该块的第一个字节,它不会为指针分配 20000 字节。

【讨论】:

    【解决方案2】:

    sizeof 返回您传递给它的 type 的大小。
    类型是char *,它只是指向一个大小为20000的内存位置。

    【讨论】:

    • 那我应该怎么做才能得到分配的内存大小呢?
    • @ProgrammingNerd 如果在 SO 上没有像 100000000 次那样问这个问题,那么根本就没有。
    • @ProgrammingNerd:你分配了它,所以你应该通过自己的簿记来跟踪它。至于程序,它会进行自己的内部簿记,以适当地释放在free 调用上分配的内存量。
    • @AlokSave 谢谢我知道了。
    【解决方案3】:

    sizeof 是编译时运算符。它只知道指针的大小(这里是 8 个字节),而不知道它所指向的大小。 sizeof 在运行时不存在。

    【讨论】:

      【解决方案4】:

      sizeof 给出指针变量的大小,而不是它指向的区域。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        • 2011-06-25
        • 1970-01-01
        相关资源
        最近更新 更多