2017-06-16 57 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);'知道要釋放什麼...... –