calloc
(и malloc
в этом отношении) могут свободно выделять столько места, сколько необходимо для удовлетворения запроса.
Итак, нет, вы не можете заранее сказать, сколько это будет на самом деле дать вам, вы можете только предполагать, что вам дается сумма, которую вы просили.
Сказав это, 700M кажется немного чрезмерным, поэтому я бы выяснил, был ли calloc
исключительно ответственен за это, например, программой, которая only выполняет 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;
}
выходов, в моей системе:
66144
225903256
означает, что calloc
выделил 225,837,112
байт, что всего лишь на пятно (115,352
байт или 0.05%
) выше запрошенного 225,721,760
.