什么是空函数大小?

what is empty function size?

整数为4字节

double 是 8 字节

空函数的大小是多少?

void test(){} //-> size????
void test1(){ int a, int b, double c } //-> size????
void test2(){ test() }  -> size??????

当我运行程序时,结果是一样的

void test(){} 
void test1() {int a} 

void main()
{
     cout<<sizeof(&test) <<endl;
     cout<<sizeof(&test1) <<endl;
}

请解答我的问题

C++ 中没有函数大小 的概念。当你做 sizeof(&test) 时,你只是得到一个 函数指针 的大小,它只能依赖于函数类型并且很可能所有函数指针类型都具有相同的尺寸。

如果您想根据函数中的指令数或这些指令在内存中占用的字节数来了解函数的大小,则不能使用核心 C++ 或其标准库直接实现。相反,您可以使用外部工具查看编译后的目标文件,例如参见this question,或可能使用特定于平台的库或编译器 intrinsics/extensions。

ISO C++ 没有函数大小的概念。

ISO 标准未指定编译器如何为各个函数创建机器级指令并将它们合并到整个程序中。每个人 platform 都可以用自己的方式做到这一点。因此,ISO 标准试图定义函数的大小是没有意义的。

因此,您不能使用 sizeof 运算符来确定函数的大小。

当您编写表达式 &test 时,您会得到一个指向函数 test 的指针。在32位平台上,指针通常为32位(即4字节),在64位平台上,通常为64位(即8字节)

这就是为什么表达式

sizeof(&test)

sizeof(&test1)

将根据您的平台评估为 48

根据平台上生成代码的方式,您或许能够找到函数大小的有意义的定义,并以特定于平台的方式找到函数的大小。但是,大多数平台都执行编译器优化,例如允许函数内联,这样它们甚至可能不会作为单独的实体存在。在这种情况下,可能很难找到有意义的函数大小定义。