堆疊上的可變大小數組:揭穿程式設計神話
在運行時確定大小的數組的概念長期以來一直被認為是程式設計禁忌,尤其是C 語言。常識表明,只有常數才能定義自動數組和靜態數組的大小。然而,最近的程式碼片段挑戰了這個概念。
考慮以下程式碼:
int main(int argc, char **argv) { size_t size; cin >> size; int array[size]; ... }
儘管沒有動態記憶體分配運算子(例如 new 或 malloc),但程式碼編譯和執行時間沒有錯誤。這怎麼可能?
關鍵在於 C99 標準,該標準引入了對堆疊上可變大小數組的支援。在這種情況下,編譯器動態地在堆疊上分配數組,就像聲明為 int array[100] 的常數大小的數組一樣。
需要注意的是,這與堆疊分配有根本的不同使用 malloc 或 new。特別是,GCC 在堆疊上分配數組,並相應地修改堆疊指標。這消除了堆分配的需要,並且類似於 _alloca 函數的行為。
雖然舊版編譯器不支援此構造,但它在現代 C 實作中變得越來越普遍。它提供了一種方便有效的方法來在運行時分配已知大小的陣列。
以上是C 中可以在堆疊上分配可變大小的陣列嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!