我的微 Controller 内存有限。(使用 arm gcc) 我应该尽可能高效地编写我的代码。考虑功能爆炸:
int foo(uint32_t a , float b)
{
.....
return 0;
}
所以我有两个参数 a
和 b
。现在,如果我将参数更改为 *a
和 *b
,则该函数在执行期间比第一个函数占用的内存更少:
int foo(uint32_t *a,float *b)
{
....
return 0;
}
如果参数变成字符串或数组(int、float ....)怎么办? 任何引用都会很棒。谢谢
最佳答案
使用指针实际上会浪费内存。这有两个原因。
<强>1。寄存器优化丢失
调用foo
的代码必须将变量的地址作为参数传递。如果传递的变量是本地变量,它可能在寄存器中,但因为您获取了它的地址,所以它必须放在堆栈中。一般来说,在寄存器中使用变量比在堆栈中使用变量更快。
<强>2。调用后变量值未知
当你给出变量函数的地址时,编译器不再知道变量是否被修改,如果再次读取它必须刷新它。
uint32_t u = 1;
float f = 2.0f;
foo(&u, &f); // 1. Address taken, u and f cannot be register variables
// 2. What is value of u now? It must refreshed from memory before addition happens
u++;
底线:除非万不得已,否则不要使用基本类型的地址。
字符串和数组已经使用地址传递,所以没有其他选择。
关于c - 优化 c 中函数的参数(GCCarm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28316889/