我正在使用Ravenscar子集编写Ada程序(因此,我知道执行时运行任务的数量).代码由gcc编译并-fstack-check启用了开关.如果我的任何任务超过其堆栈,这应该导致程序在运行时引发STORAGE_ERROR.
Ada允许在相应任务的规范期间设置那些(任务特定的)堆栈的上限,如下所示:
pragma Storage_Size (Some_Value);
Run Code Online (Sandbox Code Playgroud)
现在我想知道我必须确定哪些选项Some_Value.到目前为止我所听到的:
-fstack-usage那里的输出.如果我理解这一点,所有上述技术都是动态的(即它们需要程序运行才能工作).静态方法是否也可以想象?例如,通过Ada的一些高完整性选项进一步限制自己(例如No_Recursion,还有什么?).
也许你们中的任何人都可以列举一些最佳实践来解决这个问题和/或扩展/评论我的(肯定是不完整的)列表.
额外问题:未指定上述编译指示时,任务堆栈的默认大小是多少?GCC的文档仅说明这个值取决于运行时,而不给出任何具体的数字.
'Storage_Size通常,您可以使用属性(以位为单位计数)检查各个类型所需的堆栈空间。
一旦您将其制成表格(您可能需要将其四舍五入为整个字/双字),您可以将每个声明区域使用的堆栈空间加起来,然后遍历您的调用以查找最大堆栈使用量。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |