2017-07-26 60 views
2

我正在用mkl_malloc64對齊分配一個數組,我需要複製它。但我不明白如何調整作品。 mkl_malloc是否僅在最後添加填充以便數組的總大小是64字節的倍數?或者還會有數組元素之間的填充?memcpy會正確地複製一個分配給mkl_malloc的數組嗎?

將代碼如下例所示將a的全部全部複製到b中,或只是其中的一部分?

#include <stdio.h> 
#include <mkl.h> 

int main() { 
    double *a = mkl_malloc(10 * sizeof(double), 64); 

    // is this enough memory to include a? 
    double *b = malloc(10 * sizeof(double)); 

    // will this copy all of a? 
    memcpy(b, a, 10 * sizeof(double)); 

    mkl_free(a); 
    free(b); 
    return 0; 
} 
+4

*還是會有數組元素之間的填充?* - 想想,它怎麼能做到這一點?它返回給你一個指向'void'的指針,它沒有任何「元素」的概念。它對齊數組的* start *,最後不需要填充。 –

+0

@EugeneSh。 ..即使存在,C標準明確定義了*數組元素之間不會出現填充*。 – alk

+0

@EugeneSh。謝謝,你能把它作爲答案嗎? – devil0150

回答

1

您的示例memcpy(b, a, 10 * sizeof(double));將正常工作。

對齊適用於開始地址,而不是保留的內存塊的大小。

相關問題