为什么指向函数指针的指针是8字节?

时间:2013-10-08 19:56:47

标签: c function pointers

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

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

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

pointer to a pointer to a function is 8 byte? 

它也是一个指针。

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

指针的大小取决于架构。

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

32位大小的

是4个字节,

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

There have been architectures where pointers to different types have different sizes.

答案 3 :(得分:3)

你有一台带有64位地址字的64位机器,恰好是8个字节。指针只是一个存储器地址,由于地址空间中有多少位是8个字节。

如果您运行的是32位操作系统,那么它将是4个字节;如果是286 + DOS,则为2个字节。