我知道函数的指针是8字节,因为虚拟化但是为什么指向函数的指针的指针是8字节?
typedef void(*fun())();
sizeof(fun*); // returns 8 byte
答案 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个字节。