由于陣列只是相同型別的連續資料,并且您不需要顯式放置[]某個位置(例如,您可以int *p1 = malloc(sizeof(int) * 4);,它是如何realloc(p1, ...)知道移動(如果必須移動)正好 4 個整數的空間,即使記憶體中可能還有其他整數?
為了澄清這個問題:如果你以這種方式分配一個陣列,而且只是一個單獨的 int - 這是否意味著這些 4 1 個總 int在記憶體中永遠不會連續,或者這是“它是一個陣列”資訊在記憶體塊以某種方式(例如,它們有某種分隔符?),或者編譯器是否從malloc引數中推斷并記住它?或者是其他東西?
基本上,它如何確保它只移動那 4 個,即使有其他相同大小的記憶體塊也可能是連續的?
uj5u.com熱心網友回復:
realloc僅在傳遞指向malloc例程家族成員分配的記憶體的指標(或空指標)時才定義。這些例程記錄它們分配的記憶體。當您呼叫 時realloc,它使用這些記錄來知道分配的塊有多長。
通常,一個記憶體塊的主記錄被放入該塊之前的位元組中,所以所realloc要做的就是獲取你給它的指標,從中減去一個已知數量的位元組,然后查看那個新的資料地址,它將在其中找到有關已分配塊大小的資訊。然而,其他方法也是可能的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406082.html
標籤:
上一篇:如何將指標移到開頭?
下一篇:如何從txt檔案在終端中列印
