gpt4 book ai didi

c++ - 告诉 gcc/g++ 编译器删除孤立函数

转载 作者:行者123 更新时间:2023-11-28 06:31:41 24 4
gpt4 key购买 nike

<分区>

有些函数从未被调用过。不是因为它们没有在某些逻辑下被调用,而是因为它们从未从主函数树中调用过。假设:

int A()
{
if(...)
call F();
}

int B()
{
}

int C()
{
call B();
}

int D()
{
call A();
}

int F()
{
call A();
}

int main()
{
call D();
call F();
}

所以在这个例子中:

main  ---> D
|
--> F

D ------> A
F -------> A
A -------> F
C -------> B

因此,通过运行此应用程序,B 和 C 绝不会有机会被调用。他们是孤儿。但是 gcc/g++ 似乎没有删除孤儿函数,正如我所检查的那样:

程序 1:

int main()
{
int a=4;
int b=3;
int c=a+b;
b=c-a;
a=c-b;
return 0;
}

在命令行中运行:

g++ -std=c++11 test.cpp
md5sum a.out

我得到:

546da269abddb8dcb3883527a362f769  a.out

现在通过添加一个 orpan 函数(测试),我得到了不同的执行文件:

程序 2:

int test()
{

}

int main()
{
int a=4;
int b=3;
int c=a+b;
b=c-a;
a=c-b;
return 0;
}

在命令行中运行:

g++ -std=c++11 test.cpp
md5sum a.out

给出不同的散列:

64095263965d2d94ed2f305f99a2b25a  a.out

这表明这个在我的程序中永远不会被调用的孤立函数影响了编译后的代码。有没有办法告诉 gcc/g++ 删除孤立函数?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com