机器如何知道为通用指针分配多少空间?是否仅在转换为类型时分配?
答案 0 :(得分:3)
我不确定“泛型指针”是什么意思,但如果你的意思是“指向void”,它只是一个能够表示任何其他指针值的类型。这并不意味着它必须是任意大的;实际上它(定义为)与“指向字符的指针”具有相同的大小和表示,它也可以指向任何类型。
答案 1 :(得分:1)
在大多数平台上,指针通常具有固定大小,具体取决于您正在编译的系统的内存架构。就此而言,它们的类型无关紧要。 int
点的大小与复杂struct
的点相同。它是void
的事实并没有改变这一点。
答案 2 :(得分:1)
所有指针的编译时编译器都知道它们的大小;它指向的项目的大小可能不同。您自己将所需大小传递给malloc
/ calloc
,因此编译器在分配时没有问题。
编辑(回复评论)有些情况下,不同指针的大小不同。例如,在为哈佛架构编译的代码中,数据指针必须包括一个额外的存储器,用于区分存储在程序存储器中的数据和存储在数据存储器中的数据,而功能指针则不需要额外的存储。但是,这对于编译器来说是已知的,因此它通过查看指针的类型知道所需的分配大小。
答案 3 :(得分:0)
指针的大小都是相同的,无论它们指向的是什么,只有它们指向的东西才有不同的大小。