簡體   English   中英

C和內存分配中的通用指針

[英]Generic Pointers in C and memory allocation

機器如何知道為通用指針分配多少空間? 它僅在轉換為類型時才分配嗎?

我不確定“通用指針”是什么意思,但是如果您表示“ void的指針”,則它只是一種能夠表示任何其他指針值的類型 這並不意味着它必須任意大。 實際上,它的大小和表示形式與“指向字符的指針”相同,后者也可以指向任何類型。

在大多數平台上,指針通常基於要編譯的系統的內存體系結構是固定大小的。 就此而言,它們的類型無關緊要。 一個int點的大小與指向復雜struct的點的大小相同。 void事實不會改變這一點。

所有指針的大小都是編譯器在編譯時已知的。 所指項目的大小可能有所不同。 您自己將所需的大小傳遞給malloc / calloc ,因此編譯器在分配方面沒有問題。

編輯(響應評論)在某些情況下,不同指針的大小不同。 例如,在為哈佛體系結構編譯的代碼中,數據指針必須包括一個額外的存儲空間,該存儲空間將程序存儲器中存儲的數據與數據存儲器中存儲的數據區分開,而函數指針則不需要該額外存儲空間。 但是,這對於編譯器是已知的,因此它通過查看指針的類型知道所需的分配大小。

指針無論指向什么都具有相同的大小,只是它們指向的東西可以具有不同的大小。

暫無
暫無

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

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