杨力祥老师在C++课后给同学留了一道思考题,即探讨C++函数调用时其内存的结构究竟是什么样的。在参考《程序员的自我修养》的过程(二)

2014-11-24 09:08:24 · 作者: · 浏览: 2
T --- 位于代码区的符号,比如本文件里的函数main foo

t --- 位于代码区的符号,一般是static函数

U --- 位于本文件外的调用函数或变量符号,比如系统的printf()函数

这里要注意的是,本人使用g++编译的,所以是按c++的支持重载的函数风格编译的,可以看到所有函数均带了前缀和后缀,前缀代表属于类的名字,后缀代表参数列表的类型缩写,因为重载必须是区分参数类型,这里也可以看出,为什么返回值不同的函数不是重载,因为符号表里没有返回值的记录。

例如两个overload函数的后缀分别是f和i代表一个是float型一个是int型(上面还有v ->void型)。

nm命令对大家调试多模块的程序很有用处,大部分情况下可以解决"undefined reference"的问题,如果大家发现nm的另类很好的用法,也可以留言哈!!!