2

由于虚拟化,我知道指向函数的指针是 8 字节,但为什么指向函数指针的指针是 8 字节?

typedef void(*fun())();
sizeof(fun*); // returns 8 byte
4

4 回答 4

14

如果你有一个 8 位字节的 64 位系统(听起来像你这样做),那么所有指针的大小可能都是 8 字节。虚拟化与它没有任何关系。

于 2013-10-08T19:57:57.483 回答
4

这是因为无论它们指向什么类型的数据,它们都是指向内存地址的指针,并且您在 64 位系统上运行

如果说内存地址... 4 个字节,那么您的计算机上不可能有超过 4GB 的内存。只是没有足够的不同指针值。

于 2013-10-08T19:58:16.183 回答
4
pointer to a pointer to a function is 8 byte? 

它也是一个指针。

char *, int *, float * and etc所有这些指针都具有相同的大小和函数指针。

指针的大小取决于架构。

在大多数架构上指针大小相同在您的情况下为 8 字节(64 位)

32 位大小为 4 字节,

根据@Grijesh Chauhan 评论添加此内容。

在某些架构中,指向不同类型的指针具有不同的大小。

于 2013-10-08T19:58:43.237 回答
3

你有一个 64 位机器,它有一个 64 位地址字,恰好是 8 个字节。指针只是一个内存地址,因为地址空间中有多少位,所以它是 8 个字节。

如果您运行的是 32 位操作系统,它将是 4 个字节,或者在 286+DOS 上是 2 个字节。

于 2013-10-08T19:58:29.217 回答