首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >-w堆栈-usage=字节大小(以GCC为单位)

-w堆栈-usage=字节大小(以GCC为单位)
EN

Stack Overflow用户
提问于 2021-12-25 20:17:35
回答 1查看 717关注 0票数 0

上面提到的GCC旗给我造成了一些混乱.

这里声明如下:

-W堆栈-使用量=字节大小 如果函数的堆栈使用可能超过字节大小,请发出警告。确定堆栈使用情况的计算是保守的。编译器在确定是否发出警告时包括通过alloca、可变长度数组或相关结构分配的任何空间。

那么,“用来确定堆栈使用情况的计算是保守的”,的意思是什么?

我链接了一个用C++编写的小程序,并故意使用-Wstack-usage=1查看各种函数的警告和堆栈用法。

下面可以看到一些警告信息:

代码语言:javascript
运行
复制
Util.cpp: In function 'getCharInput.constprop':
Util.cpp:113:6: warning: stack usage is 64 bytes [-Wstack-usage=]
  113 | void util::getCharInput( char* const inputBuffer, const std::streamsize streamSize )
      |      ^
Main.cpp: In function 'main':
Main.cpp:10:5: warning: stack usage is 112 bytes [-Wstack-usage=]
   10 | int main( )
      |     ^

为什么main的堆栈使用量仅为112个字节,尽管它调用了所有其他函数?在被调用方返回并从main的堆栈帧中删除之前,它不是将被调用方保留在其堆栈帧上吗?不过,我可能有错误的知识。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-25 20:33:54

为什么main的堆栈使用仅为112个字节,尽管它调用了所有其他函数?

堆栈使用情况由GCC计算,仅用于此函数。这也出现在文档中:“警告如果函数的堆栈使用可能超过字节大小”。

在被调用方返回并从main的堆栈帧中删除之前,它不是将被调用方保留在其堆栈帧上吗?

是的,所以在执行代码时。GCC不会静态地遍历整个调用堆栈。它只计算一个特定函数的堆栈使用情况,并检查该单个特定函数的使用是否大于某个阈值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70482511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档