我如何预先计算calloc将分配多少内存?

far*_*dve 0 c calloc

我基本上有这段代码.

char (* text)[1][80];
text = calloc(2821522,80);
Run Code Online (Sandbox Code Playgroud)

我计算它的方式,calloc应该分配215.265045兆字节的RAM,但是,程序最终超过了这个数字并分配了近700mb的内存.

所以看来我无法正确知道该功能将分配多少内存.

如何计算这个属性?

pax*_*blo 5

calloc(并且malloc就此而言)可以自由地分配满足请求所需的空间.

所以,不,你不能事先告诉它实际上会给你多少,你只能假设它给你你所要求的金额.

话虽如此,700M看起来有点过分,所以我会调查是否由此calloc承担全部责任,例如,一个只能做到这一点的程序calloc.

您可能还想研究如何测量内存使用情况.

例如,以下程序:

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

int main (void) {
    char (* text)[1][80];
    struct mallinfo mi;

    mi = mallinfo(); printf ("%d\n", mi.uordblks);
    text = calloc(2821522,80);
    mi = mallinfo(); printf ("%d\n", mi.uordblks);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出,在我的系统上:

66144
225903256
Run Code Online (Sandbox Code Playgroud)

意味着calloc已分配的225,837,112字节只是请求之上的一个smidgeon(115,352字节或0.05%)225,721,760.