我有以下代码:
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
分配空间,即使该变量超出范围并且可以安全地从堆栈中删除。var2
func2
我尝试了在 gcc 文档中找到的几个选项:
fomit-frame-pointer
fconserve-stack
我已经在 x86 和 ARM 架构上尝试过了,它的行为是相同的。
这个问题背后的基本原理是仅使用必要的堆栈大小。
以及相关的问题:如果可以优化堆栈空间,是否可以在选项生成的.su文件中添加每个子函数调用使用的堆栈-fstack-usage
。
谢谢
当我这样做时:
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 CI 作业配置为仅在受限分支上运行,但我找不到only
执行此操作的指令。