小编Lou*_*ron的帖子

当变量超出范围时,有没有办法强制 gcc 从堆栈中释放空间

我有以下代码:

extern void func1(char *array);
extern void func2(char *array);

void myfunction(void) {
    if (somecondition) {
        char var2[256];
        func2(var2);
    }
    if (someothercondition) {
    {
        char var3[3];
        func3(var3);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法让编译器 (gcc)只使用堆栈中func3使用的 3 个字节进行调用。它总是为调用范围中使用的变量var3分配空间,即使该变量超出范围并且可以安全地从堆栈中删除。var2func2

我尝试了在 gcc 文档中找到的几个选项:

  • fomit-frame-pointer
  • fconserve-stack

我已经在 x86 和 ARM 架构上尝试过了,它的行为是相同的。

这个问题背后的基本原理是仅使用必要的堆栈大小。

以及相关的问题:如果可以优化堆栈空间,是否可以在选项生成的.su文件中添加每个子函数调用使用的堆栈-fstack-usage

谢谢

c gcc stack-allocation

7
推荐指数
1
解决办法
213
查看次数

我可以配置依赖于手动作业的 gitlab CI 作业吗?

当我这样做时:

job1:
  stage: build
  when: manual
  script:
    - daddaa

job1_deploy:
  stage: deploy
  dependencies: [job1]
  script:
    - do things to deploy
Run Code Online (Sandbox Code Playgroud)

它只是失败,因为job1_deploy即使job1没有手动启动,它也已启动。

有没有正确的方法来配置job1_deploy手动启动job1并通过时自动启动?

gitlab gitlab-ci

6
推荐指数
1
解决办法
6290
查看次数

如何将 gitlab CI 作业配置为仅在受保护的分支上运行?

我正在尝试将 gitlab CI 作业配置为仅在受限分支上运行,但我找不到only执行此操作的指令。

gitlab-ci

5
推荐指数
3
解决办法
2050
查看次数

标签 统计

gitlab-ci ×2

c ×1

gcc ×1

gitlab ×1

stack-allocation ×1