求助一个编译工程code的大小问题

2019-07-21 07:01发布

代码是实验五 外部中断实验(库函数版)
编译环境是mdk5   option c/c++ 的one ELF...没有勾选

在学习中发现了一个现象。把没有调用用的库函数定义和声明注释掉一部分后,编译的code变小了。
在一些.c文件和对应的.h文件增加新函数的定义和声明,code变大(在没有调用新函数的条件下)。
但是在sys.h与sys.c情况却不同。加入定义的新函数后,编译的code大小却不变。甚至把sys.c文件 remove了code大小也不变。
有知道的老哥吗?麻烦讲一讲,谢谢。
这是在编译器的什么地方设置的吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
??
2019-07-21 18:30
(1)   test_sys();  是sys.c里定义的函数  在sys.h  里声明
(2)   test_s();     是beep.c定义的函数   在beep.h里声明
(3)   _test();       是core_cm3.c定义的函数  我在core_cm3.h里加入extern void _test(void);  
core_cm3.c里不include‘’core_cm3.h‘’,但是主函数文件include‘’core_cm3.h‘’,对于主函数调用_test(),应该算是调用外部函数吧?

测试结果:
对于(1)如果主函数不调用 test_sys(),code大小不改变,.map文件里也找不到test_sys符号。
如果调用,code大小改变,map文件里找到两处test_sys符号。

对于(2) 如果主函数不调用 test_s(),code增加,.map文件里Global Symbols找到一处 test_s符号。
如果调用,code继续增加,map文件里Section Cross References又找到一处 test_s符号。(此时一共两处了)。

对于(3) 其结果和(1)一样。

现在的问题就是(1)和(2)的条件一样,但是编译后的结果却不一样。这是为啥咧?

文件我又修改了一下重新上传一遍,有知道的老哥帮忙再看看呗?难道这是bug?

又试了一下,sys.c的其他函数只要是没在主函数调用,在map文件里都找不到符号why?

一周热门 更多>