2017-06-16 140 views
1

我正在学习C并有此问题。假设我宣布下列缓冲:以字节为单位确定缓冲区的总大小

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

我怎么知道总规模这个缓冲区在内存(字节)宣布?我用下面的方式,但我不知道这是否是正确的逻辑:int buf_size_in_byte= (n)* sizeof(double);

+2

'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;' –

+1

@DavidBowling非常感谢 – Medo

+2

想法:使用'buf = calloc(n * dim,sizeof * buf);',那么不需要知道'calloc()'调用的'buf'类型。更容易编写,审查和更新。 – chux

回答

4

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

+0

谢谢....... – Medo

0

除非我失去了一些东西:

BUF本身始终只是要的sizeof(双*)。

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

免费(BUF)还应该知道到底有多少,当你用它做但要解除该内存...

+0

'double *'是什么? (一个指针)。你是正确的(假设你自己的''是'buf'),'buf'(或任何指针)总是'sizeof(一个指针)'(通常是x86上的4个字节或x86_64上的8个字节)。您正在分配一个包含您的数据所需的任何大小的内存块。 (随你便)。是'免费'知道。怎么样?你有责任保存一个指向buf开头的指针。如果你这样做,'free(buf);'知道要释放什么...... –