标准C(ISO/IEC 9899:1999)第6.5.3.4说为什么标准者禁用的sizeof要被施加到功能
sizeof运算符不应被应用于具有 功能型或表达不完整的类型
但是为什么? 使用readelf
检查可执行文件显示,在编译过程中函数的大小完全知道。
Symbol table '.symtab' contains 67 entries:
Num: Value Size Type Bind Vis Ndx Name
.......
37: 0000000000400541 16 FUNC LOCAL DEFAULT 13 clean
.......
46: 00000000004005f0 2 FUNC GLOBAL DEFAULT 13 __libc_csu_fini
......
49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]@GLIBC_2.2.5
52: 00000000004005f4 0 FUNC GLOBAL DEFAULT 14 _fini
53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]@GLIBC_
ed
58: 0000000000400560 137 FUNC GLOBAL DEFAULT 13 __libc_csu_init
62: 000000000040052c 21 FUNC GLOBAL DEFAULT 13 main
这里大小0
属于功能从共享库,[email protected]@GLIBC_2.2.5
功能例如。所以,我检查libc
信息,这里涉及到[email protected]@GLIBC_2.2.5
Size Type
...........
399: 0000000000070ec0 392 FUNC WEAK DEFAULT 12 [email protected]@GLIBC_2.2.5
一块readelf -a /lib/x86_64-linux-gnu/libc.so.6
输出的是它根本不需要的特征,或者它打破C
理念,还是有,我不能看到一些技术问题?
如果函数内联,该怎么办?你如何计算它的大小? –