簡體   English   中英

我可以增加靜態分配數組的大小嗎?

[英]Can I increase the size of a statically allocated array?

我知道可以增加動態分配數組的大小。

但是我可以增加靜態分配數組的大小嗎? 如果是,如何?

編輯:雖然這個問題是針對 C 語言的,但也可以考慮其他語言。是否可以用其他語言?

簡單的答案是否定的,這是不可能的。 因此名稱為“靜態”。

現在,許多語言看起來像靜態分配的數組,但實際上是靜態分配的對動態分配數組的引用。 那些你可以調整大小的。

在 VB .NET 中,它將是:

Redim Preserve ArrayName(NewSize)

不知道你在追求什么語言...

而且我不會經常使用這個命令......它的效率非常低。 鏈表和不斷增長的數據結構效率更高。

不它不是。 這里有兩個選項:

  1. 使用動態的
  2. 或者,冒着浪費內存的風險,如果您知道數組將存儲的最大元素數,請相應地靜態分配

是的,那是C。

如果你很小心,你可以使用alloca() 該數組是在堆棧上分配的,但就代碼風格而言,它與您使用malloc非常相似(盡管您不必free它,這是自動完成的)。 我會讓您決定是否將其稱為“靜態”數組。

否。靜態分配允許編譯器做出各種假設,然后在編譯期間將這些假設納入程序。

這些假設包括:

  1. 將其他數據立即放在數組之后是安全的(不給您留下增長空間),並且
  2. 數組從某個地址開始,然后成為程序機器代碼的一部分; 您無法在某處分配新數組(並使用它),因為無法更新對地址的引用。

(好吧,如果程序存儲在 ram 中,引用可以更新,但自修改程序非常不受歡迎,而且肯定比動態數組更麻煩。)

從技術上講,在 C 中甚至不可能增加動態分配數組的大小。

實際上, realloc()執行某種“創建新對象並復制數據”例程。 它根本修改現有堆內存對象的大小。

所以答案很簡單,您無法在分配后更改任何對象或對象數組的大小,無論是動態分配還是靜態分配。

您可以做的是通過開發一個函數來使用相同的策略,該函數創建另一個具有所需大小的靜態分配對象數組並復制數據。 如果新對象數組小於舊對象數組,則丟棄差異中的值。

唯一的區別是,新數組的大小與舊數組的大小相等,需要在編譯時固定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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