Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么向翻译单元中的所有函数添加static会增加生成的对象文件的大小?_C++_C_Esp8266_Arduino Esp8266 - Fatal编程技术网

C++ 为什么向翻译单元中的所有函数添加static会增加生成的对象文件的大小?

C++ 为什么向翻译单元中的所有函数添加static会增加生成的对象文件的大小?,c++,c,esp8266,arduino-esp8266,C++,C,Esp8266,Arduino Esp8266,我的意图是将一些符号的可见性限制在定义它们的翻译单元。正在向生成的固件文件添加688字节。你知道为什么吗 涉及的编译器是GCC4.8.2 目标设备是ESP-8266微控制器。 优化器设置为-Os。有趣。也许在添加了static之后,函数现在是由编译器内联的,而以前不是?函数不必显式地标记为inline,就可以内联。在我看来,按照您的操作是一种很好的做法(使所有函数都不在其TU静态之外使用)-您可以在我发布的C代码中经常看到它,尽管我通常不会对此进行评论。所以,做得很好。如果内联导致了增长,而这对

我的意图是将一些符号的可见性限制在定义它们的翻译单元。正在向生成的固件文件添加688字节。你知道为什么吗

涉及的编译器是GCC4.8.2 目标设备是ESP-8266微控制器。
优化器设置为-Os。

有趣。也许在添加了
static
之后,函数现在是由编译器内联的,而以前不是?函数不必显式地标记为
inline
,就可以内联。在我看来,按照您的操作是一种很好的做法(使所有函数都不在其TU
静态
之外使用)-您可以在我发布的C代码中经常看到它,尽管我通常不会对此进行评论。所以,做得很好。如果内联导致了增长,而这对您来说是一个问题,那么您可能需要调查“为空间而优化”,而不是“为速度而优化”。(GCC 8.2.0文档。您需要4.8.2的等效版本-易于推断。)您使用的优化级别是什么?这是否发生在
-Os
优化中?可能一个函数内联了两次或更多次,因此您将得到更大的结果firmare。你能检查一下如果你用
\uuuuu属性((\uuuuu noinline\uuuu))
标记所有这些函数会发生什么吗?试着用
-Os
编译。用所用的优化级别更新了问题。