【问题标题】:Determine the total size of a buffer in byte确定缓冲区的总大小(以字节为单位)
【发布时间】:2017-06-16 01:13:41
【问题描述】:

我正在学习 C 并且有这个问题。假设我声明了以下缓冲区:

int n=100, dim=5;
double *buf = calloc(n * dim, sizeof(double));

我如何知道在内存中声明的这个缓冲区的总大小(以字节为单位)?我使用以下方式,但我不确定它是否在逻辑上正确:int buf_size_in_byte= (n)* sizeof(double);

【问题讨论】:

  • buf_size_in_byte 应该是size_t,它是:size_t buf_size_in_byte = sizeof(double) * n * dim;,或者更好:size_t buf_size_in_byte = sizeof *buf * n * dim;
  • @DavidBowling 非常感谢
  • 想法:使用buf = calloc(n * dim, sizeof *buf);,则无需知道buf指向calloc()调用的类型。更容易编写、审查和更新。

标签: c pointers memory memory-management sizeof


【解决方案1】:

calloc() 的第一个参数是对象的数量,第二个参数是每个对象的大小。总分配大小是这两个值的乘积。在你的情况下是n * dim * sizeof(double)

【讨论】:

    【解决方案2】:

    除非我遗漏了什么:

    buf 本身总是 sizeof (double *)。

    但是您分配的内存量将是 n * dim * sizeof(double)。

    free(buf) 仍然应该知道在你完成后释放多少内存和释放哪些内存......

    【讨论】:

    • double * 是什么? (指针)。您是正确的(假设您的 itselfbuf),buf(或任何指针)将始终是 sizeof (a pointer)(通常在 x86 上为 4 字节或在 x86_64 上为 8 字节)。您正在分配包含数据所需的任何大小的内存块。 (由你决定)。是的free 知道。如何?您有责任保留指向 buf 开头的指针。如果你这样做,free (buf); 知道要释放什么...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2013-02-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多