<分区>
我只是想从内存的角度了解可能影响函数指针大小的各种原因。
我想强调的是,我的问题不是关于如何使用函数指针以及如何对它们进行类型转换。这只是关于如果我声明一个像
这样的函数指针 int (*fptr)(int, int);
并为其创建一个变量
fptr fun1;
如果我在 32/64 位机器上运行它,我期望获得的大小是多少?
是否有可能仅通过查看其声明来确定函数指针的大小,就像我知道 void 指针在 32 位机器上的大小为 4 个字节一样。
<分区>
我只是想从内存的角度了解可能影响函数指针大小的各种原因。
我想强调的是,我的问题不是关于如何使用函数指针以及如何对它们进行类型转换。这只是关于如果我声明一个像
这样的函数指针 int (*fptr)(int, int);
并为其创建一个变量
fptr fun1;
如果我在 32/64 位机器上运行它,我期望获得的大小是多少?
是否有可能仅通过查看其声明来确定函数指针的大小,就像我知道 void 指针在 32 位机器上的大小为 4 个字节一样。
最佳答案
兰戈,看here :
__SIZEOF_POINTER__ // Pre-defined GCC macro
对于 MS Visual C/C++ 编译器,您可以检查宏 _WIN64
、_M_IX86
和其他指示目标处理器架构的宏。完整列表 here .
附言经过一番思考后,我不得不承认我关于函数指针的大小将与 void*
相同的说法是错误的(我可以想象数据和代码的内存地址可能不同的架构)。无论如何,关于“是否有可能确定函数指针的大小”这个问题,考虑到我在评论中得到的澄清,OP 与 gcc 一起工作,__SIZEOF_POINTER__
可以作为答案。虽然 @2501 在他们的评论中提供的答案要好得多 - sizezeof(fptr)
应该适用于任何编译器
关于c - 函数指针的大小取决于哪些参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229296/