在dll中隐藏符号而不是仅导出所有内容的目的是什么?除了不占用exe的更多空间外,还有其他好处吗?
答案 0 :(得分:2)
还有其他好处吗?
还有很多其他好处。
对于库本身,不能插入隐藏的符号。当您在共享库中有这样的代码时:
int foo() { return 20; }
int bar() { return foo() + 1; }
bar
的收益是什么?您可能会认为它是21,但您可能错了:如果早期的库定义了自己的foo
,则bar
的返回结果可能是任何内容。
符号隐藏的其他好处包括更快的符号解析时间(当加载程序查找foo
时,它必须依次搜索每个加载的库,并且如果设置了 exported ,则这样做会更快。函数的数量很小),并且对RAM的要求也较小(由于动态加载程序需要符号名称,因此它们都存在于内存中)。
符号隐藏还可以防止最终用户意外地依赖库实现细节,从而使您可以更改实现而不会破坏现有用户。