gpt4 book ai didi

c - 通过分解空指针来显着减少编译代码大小

转载 作者:行者123 更新时间:2023-11-30 15:54:31 24 4
gpt4 key购买 nike

我最近一直在为微 Controller 开发一些 C 语言嵌入式软件,该微 Controller 只有 2kB 闪存。编程即将结束时,我已经达到了代码限制。到目前为止,当发生这种情况时,我一直在提高编译器优化级别,重新测试,然后愉快地继续。然而,我最近达到了优化的极限,在添加最后一点功能后,内存再次耗尽。结果,我不得不让 George Foreman 获取我的源代码并排出一些脂肪。

我到处减少一些抽象层,这有点帮助,但还不够。接下来我看到的是函数原型(prototype)

void process_event(Event event, void *data);

它将要处理的事件和一个空指针作为其参数,可以用于向调用传递附加数据。如果我不需要任何额外的数据,我就通过了 NULL 。这个函数是在开发的早期编写的,我意识到我从未使用过 data ,所以我把它分解出来。这一更改为我节省了所需的编译代码大小(~100 字节),我想知道为什么,特别是考虑到我通常通过 NULLprocess_event被叫了?

最佳答案

大约 100 字节可能符合这样的事实:每次调用函数时,您的调用站点都必须传递一个额外的参数 - 这至少会涉及寄存器的清除,并且根据您的芯片,存储它在调用之前就在堆栈上。

每次调用减少一条指令也有可能导致更多代码被删除,具体取决于跳转的实现方式,因为您可能会发现某些代码现在位于使用短相对偏移而不是长相对偏移。当尝试加载常量时,可以进行类似的节省。

关于c - 通过分解空指针来显着减少编译代码大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com