在C 中動態分配後確定數組大小
在C 中,使用new 運算子動態分配的數組本質上不會以程式設計方式公開其大小。這個問題源自於這樣的觀察:delete[] 必須知道分配的陣列的大小才能有效地釋放記憶體。
為什麼沒有內建函數來取得陣列大小?
與在堆疊上聲明的數組不同,其大小可以使用 sizeof() 確定,動態分配的數組的大小在編譯期間是未知的。這是因為運行時或作業系統的記憶體管理器管理分配的內存,而不是編譯器。 sizeof() 作為編譯時常數運行,不能動態計算動態分配數組的大小。
替代策略
即使C 沒有提供內建的函數來取得陣列的大小,還有其他方法:
int *arr = new int[256]; int *p = &arr[100]; int size = p - arr; // Subtracting pointers yields the size
影響
缺乏標準化方法來確定 C 語言中動態分配數組的大小來自該語言對內存管理靈活性和平台獨立性的關注。雖然它在某些場景中存在局限性,但它也允許多種實施策略和優化機會。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3