首頁 > 後端開發 > C++ > 你能確定 C 中用「new T[]」分配的陣列的大小嗎?

你能確定 C 中用「new T[]」分配的陣列的大小嗎?

DDD
發布: 2024-11-08 05:39:01
原創
416 人瀏覽過

Can You Determine the Size of an Array Allocated with `new T[]` in C  ?

用 new T[] 分配的陣列可以透露它們的大小嗎?

與它的對應的delete[] 不同,它本質上知道T[] 的大小分配的數組,C 缺乏一種機制來以編程方式確定使用new T[] 創建的數組的大小。

深入研究差異

這種差異的關鍵在於在delete[]的本質中。在編譯期間,數組的大小由運行時或作業系統的記憶體管理器精心保存。但是,編譯器仍然無法存取此資訊。相反,sizeof() 作為編譯器的操作數而不是真正的函數,無法確定動態分配數組的大小,因為它們的範圍在編譯時不確定。

說明性範例

考慮以下程式碼範例:

int *arr = new int[256];
int *p = &arr[100];
printf("Size: %d\n", sizeof(p));
登入後複製

在這裡,編譯器面臨著一個令人困惑的困境:如何確定p 的大小。數組的指標缺乏所分配記憶體區塊的開始或結束的固有知識。它們可能指示區塊的開始、其中的特定元素,甚至任意位置。

固有限制

C 和 C 數組,與一流不同對象,退化為指針。編譯器和程式都不知道指標是否標識了新區塊的開始、單一物件或中間位址。

這種設計選擇源自於 C 和 C 中記憶體管理的委託性質,從而使它給程式設計師和作業系統。新建和刪除的實作在不同平台和場景之間差異很大,排除了 C 標準內的標準化。

以上是你能確定 C 中用「new T[]」分配的陣列的大小嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板