[英]Is initializing an array of size 2 the same as mallocing a pointer with an array of size 2?
在我的程序中,我正在創建一個結構數組,它基本上是一個具有 32 字節緩沖區的值,或者一個看起來像這樣的結構:
typedef struct
{
long buffer[2];
int val;
} buffered_val_t;
所以每個數組值都會有這個緩沖區和一個val。 這背后的想法是清除 64 字節高速緩存行中的一些空間。 但是,不是直接設置 buffer[2] ,而是等效於將結構設置為:
typedef struct
{
long * buffer;
int val;
} buffered_val_t;
然后在另一個 function 中,使用以下命令初始化緩沖區:
long *array_one = (long *) malloc (sizeof(long) * 2);
int x;
for (x = 0; x < n; x++)
{
buffered_val_t[x].buffer = array_one;
}
這里能達到同樣的“緩沖效果”嗎? 編輯:我的意思是,緩存的相同部分會清除相同數量的空間嗎?
功能一樣嗎? 是的,它們都是有效的並且實現了相同的目標。
對於后者,您可能需要free
malloc 的 memory 區域的額外工作。
另一方面,如果您的陣列太大, malloc
'ing - 動態 memory 分配 - 由於潛在的堆棧(又稱自動存儲)溢出問題,可能是不可避免的。 在您的情況下,我建議堅持使用前者,因為它只有 2 個數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.