簡體   English   中英

初始化大小為 2 的數組是否與分配大小為 2 的數組的指針相同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM