我遇到GCC优化问题,
当我使用gcc test.c -Os
或gcc test.c -O2
时,
main()函数将放在起始地址。
但有一些未使用的功能,例如<_start>
<exit>
<memset>
,为什么它们仍在那里?
我尝试使用-ffunction-sections
-fdata-sections
或-gc-sections
,但它无法正常使用。
我的简单代码:
#include <stdio.h>
int main(){
char buff[20];
sprintf(buff, "%s%d", "hello", 6);
return 0; }
答案 0 :(得分:2)
_start
通常是您的可执行文件的真正入口点(在调用main
之前初始化C运行时的那个); exit
终止时隐式调用main
。编译器在各种情况下隐式调用memset
(例如,当堆栈上的零初始化缓冲区时),或printf
实现可能使用x::y
。