假設我現在使用代碼創建了一個向量
double *a;
double b;
a = (double *)malloc(64*sizeof(double));
//Initialize a
for(int i = 0; i < 64; i )
{
b = a[i];
}
我猜在計算時b,a[i]會為每個單獨在快取中傳輸,i對嗎?
那么創建ausingdouble a[64]而不是malloc?整個陣列會同時放入快取嗎?
提前致謝。
uj5u.com熱心網友回復:
那么創建
ausingdouble a[64]而不是malloc?整個陣列會同時放入快取嗎?
如果使用double a[64]來宣告,那應該同時放入Stack。
如果使用malloc分配記憶體,則應同時放入Heap。
只是記憶體位置不同。
演示
根據Demo,整個陣列應該同時放入Heap或Stack中。
在另一方面,后malloc的Size a輸出65這個原因是malloc_usable_size(void* ptr)問題。
(使用此功能只是想確定記憶體是否已經分配。)
malloc_usable_size() 描述
malloc_usable_size()由于對齊和最小大小限制,回傳的值可能大于分配的請求大小。盡管應用程式可以覆寫多余的位元組而不會產生不良影響,但這并不是一個好的編程習慣:分配中的多余位元組數取決于底層實作。
我猜在計算 b 時,a[i] 將分別在快取中為每個 i 傳輸,對嗎?
我不確定你的cache意思,但a[i]應該取自Heap或Stack。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322576.html
