如何打印任何功能的大小。之前有人问过,但答案不是粒子?

时间:2014-08-19 04:18:26

标签: c sizeof

如何打印任何功能的尺寸?这个问题被问到但答案不是粒子。 根据之前的回答不同,当我使用内置函数来查找函数的大小时?

 #include<stdio.h>
 void print(void)
 {

    printf("i m in print \n");

 }
 int main()
 {
      printf("%d\n",(int)main-(int)print); // o/p is 20 byte  what is this 20    
                                           //is size of function?previous asked answer
      printf("size=%d\n",sizeof(print));// o/p is 1 byte ? how to get exact plz help?
 }

4 个答案:

答案 0 :(得分:6)

函数类型的

sizeof违反了sizoef运算符的约束:

  

C11§6.5.3.4sizeof和_Alignof运算符

     

sizeof运算符不应用于具有函数类型的表达式或   不完整的类型,这种类型的括号名称,或表达式   指定一个位字段成员。

答案 1 :(得分:5)

函数通常不作为紧凑的连续区域存在于内存中。这就是为什么找不到函数的大小的原因。功能没有大小。

答案 2 :(得分:0)

在运行时没有保证确定函数大小的方法(没有理由这样做)。

函数是文本段的一部分(可能是也可能不是“堆”)或它与您使用的体系结构的等价物。在编辑过程中没有关于其大小的数据,最多可以从符号表中获取它们的入口点(它不必是可用的)。因此,在您遇到的大多数C环境中,您无法在实践中计算其大小。

答案 3 :(得分:0)

生成目标文件,然后使用objdump -S foo.o命令查找函数大小。